PDA

View Full Version : Problem bei WRITE mit relat. Satznummer



Seiten : [1] 2

ebschubert
09-01-09, 13:47
Hallo @ all

in einem Programm, dass generisch arbeitet, aktualisiere und lösche ich Daten x-beliebiger Dateien



** Dummyfile für Arbeit mit DBF
FDummyFil UF A F32766 Disk Block(*No)
F UsrOpn
F RecNo(RRN)



**-- Generische DBF-Daten: ---------------
**
D GenericDbf Ds
D DbfDta 1 32766
**


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... :)

Fuerchau
09-01-09, 13:50
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.

ebschubert
09-01-09, 13:53
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.

Fuerchau
09-01-09, 14:03
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.

ebschubert
09-01-09, 14:07
... 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.

Fuerchau
09-01-09, 14:13
Schau ins Joblog!
Lass mal beim write(e) das "(e)" weg, damit du einen Fehler bekommst.

ebschubert
09-01-09, 14:14
... ausserdem ist DUMMYFIL hier nicht der Formatname!

Fuerchau
09-01-09, 14:31
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.

ebschubert
09-01-09, 14:42
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?

Fuerchau
09-01-09, 15:00
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 ?