-
Problem bei WRITE mit relat. Satznummer
Hallo @ all
in einem Programm, dass generisch arbeitet, aktualisiere und lösche ich Daten x-beliebiger Dateien
Code:
** Dummyfile für Arbeit mit DBF
FDummyFil UF A F32766 Disk Block(*No)
F UsrOpn
F RecNo(RRN)
Code:
**-- Generische DBF-Daten: ---------------
**
D GenericDbf Ds
D DbfDta 1 32766
**
Code:
C RRN Chain DummyFil GenericDbf
c If %found( DummyFil )
*
c If UpdAct = 'D'
c Delete(e) DummyFil
c Else
c Movel(p) ExtDta GenericDbf
C Update(e) DummyFil GenericDbf
c EndIf
*
c Else
*
c If UpdAct = 'A'
c Movel(p) ExtDta GenericDbf
C Write(e) DummyFil GenericDbf
c EndIf
*
c EndIf
UPDATE und DELETE klappt - aber beim WRITE kommt nix in der Datei an.
Hat jemand einen Tipp?
Vielen Dank vorab...
-
Dazu musst du mal ins Joblog schauen.
Ich denke, dass da ein Fehler angegeben ist, da beim Write ein Formatname und nicht ein Dateiname angegeben werden muss.
-
Es ist eine programmbeschriebene Datei!
The name operand must be the name of a file or record format. A record format
name is allowed only with an externally described file. A file name is required
with a program described file, and the data-structure operand must be the name of
a data structure. The record is written directly from the data structure to the file.
You cannot specify the data-structure operand if name is a record format name.
The result field must be a data structure name.
-
Ja das schon, aber mach mal einen DSPFD deiner Zieldatei an.
Wenn dort der Formatname, den du im Write angibst nicht vorhanden ist, wird der Write eben abgelehnt.
Dein Programm kann nicht mit DDS-beschriebenen Dateien arbeiten.
PS:
Mein SQLCPY arbeitet mit SQL und ist deshalb flexibler.
-
... also ich intepretiere den Text aus dem RPG Handbich so, dass bei programmbeschriebenen Dateien über eine zugeordnete Datenstruktur aktualisiert wird!
*...1....+....2....+....3....+....4....+....5....+ ....6....+....7...+....
CL0N01Factor1+++++++Opcode(E)+Factor2+++++++Result ++++++++Len++D+HiLoEq....
*
* The WRITE operation writes the fields in the data structure
* DS1 to the file, FILE1.
*
C WRITE FILE1 DS1
Figure 335. WRITE Operation
WRITE (Create New Records)
Chapter 23.
-
Schau ins Joblog!
Lass mal beim write(e) das "(e)" weg, damit du einen Fehler bekommst.
-
... ausserdem ist DUMMYFIL hier nicht der Formatname!
-
Der Unterschied zwischen Update/Delete und Write ist eben der, dass bei Update/Delete/Read/setll/setgt ein Dateiname erlaubt ist, beim Write ein Formatname erforderlich ist.
Bei intern beschriebenen Dateien ist der Formatname identisch und deshalb kein Problem.
Wenn du die Datei als intern beschrieben definierst, aber per OVRDBF auf eine extern beschrieben Datei verweist, gilt die Bedingung der Zieldatei.
In diesem Fall ist hier der korrekte Formatname erforderlich (was in RPGLE leider nicht dynamisierbar ist).
Der Compiler weiß ja nicht, was zur Laufzeit erforderlich sein wird.
Also schau doch bitte ins Joblog um den genauen Fehler festzustellen.
Ggf. ohne "(e)" testen, dann gibts eine CPF-Nachricht.
-
ich bekomme :
Nachrichten-ID . . . . : CPF4011 Bewertung . . . . . . : 10
Nachrichtenart . . . . : Diagnose
Sendedatum . . . . . . : 09.01.09 Sendezeit . . . . . . : 16:43:32
Nachricht . . . : Pufferlänge größer als Satz für Teildatei CBXDTAF.
Ursache . . . . : Die Dateisatzlänge für Teildatei CBXDTAF in Datei TDTA in
Bibliothek SU#RMT ist 23. Die Länge des Puffereintrags ist 32766. Der Rest
des Puffereintrags wird mit Leerzeichen aufgefüllt.
Fehlerbeseitigung: Falls erforderlich die im Programm angegebene Satzlänge
auf die Länge des längsten Satzes in der Teildatei ändern. Anschließend die
Anforderung wiederholen.
das sollte doch trotzdem funktionieren?
-
Es muss noch eine weitere Meldung (ggf. folgend) geben. Die Pufferlänge ist ja nur eine Warnung.
Welchen Fehler bekommst du wenn du "(e)" beim Write mal wegläßt ?
-
E/A-Fehler CPF5006 in Datei DUMMYFIL erkannt.
Funktionsprüfung. RNX1299 nicht überwacht durch PGMA bei Anweisung
0000000290, Instruktion X'0000'.
-
Wir haben das mit dem Recno dann in die Tonne getreten.
Vielleicht hilft es Dir ja, wenn Du statt des else-Zweiges mit der Write-Funktion dann ein anderes Programm aufrufst, das nicht mit RecNo arbeitet, sondern einen einfachen Write macht?
Oder defininiere die Datei mittels OVRDBF
zweimal (mit Recno für Update/Delete Datei1 und ohne Recno Datei2)
Similar Threads
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 8
Letzter Beitrag: 10-01-07, 10:58
-
By Stoeberl in forum NEWSboard Programmierung
Antworten: 11
Letzter Beitrag: 26-10-06, 10:07
-
By ChrisX in forum IBM i Hauptforum
Antworten: 1
Letzter Beitrag: 11-10-06, 15:31
-
By Flappes in forum IBM i Hauptforum
Antworten: 0
Letzter Beitrag: 06-10-06, 08:39
-
By timeless in forum NEWSboard Programmierung
Antworten: 2
Letzter Beitrag: 24-05-06, 06:37
Berechtigungen
- Neue Themen erstellen: Nein
- Themen beantworten: Nein
- You may not post attachments
- You may not edit your posts
-
Foren-Regeln
|
Erweiterte Foren Suche
Google Foren Suche
Forum & Artikel Update eMail
AS/400 / IBM i
Server Expert Gruppen
Unternehmens IT
|
Kategorien online Artikel
- Big Data, Analytics, BI, MIS
- Cloud, Social Media, Devices
- DMS, Archivierung, Druck
- ERP + Add-ons, Business Software
- Hochverfügbarkeit
- Human Resources, Personal
- IBM Announcements
- IT-Karikaturen
- Leitartikel
- Load`n`go
- Messen, Veranstaltungen
- NEWSolutions Dossiers
- Programmierung
- Security
- Software Development + Change Mgmt.
- Solutions & Provider
- Speicher – Storage
- Strategische Berichte
- Systemmanagement
- Tools, Hot-Tips
Auf dem Laufenden bleiben
|
Bookmarks