PDA

View Full Version : Tasten definieren



Steven
09-10-02, 08:01
Hi *ALL,

ich hab gestern das programmieren mit Subfiles angefangen. Deshalb kenn ich mich da noch nicht so aus.

Ich hab eine Tabelle mit Daten, und am Anfang jeder Zeile ist ein Feld in dem man eine Zahl eingeben kann:

2 = Datensatz ändern
4 = Datensatz Löschen

F6 = neuen Datensatz hinzufügen.

Für diese 3 Funktionen habe ich jeweils ein WINDOW erstellt das dann angezeigt werden soll. Und der Befehl wird über eine Subroutine ausgeführt.

Ich habe jetzt das problem das egal welche dieser 3 Funktionen ich ausführen will die Fehlermeldung:

"Versuch doppelten Satz in Datei zu schreiben."

kommt.

Beim Compilieren kommt kein Definierungsfehler, und ich habe zumindest F6 im RECORD vom DSPF definiert.
Muss ich die Tasten nochmal extra definieren, und wie definiere ich 2 und 4 im Subfile?

mk
09-10-02, 08:34
Hallo Steven,

Wenn Du mit Subfile anfängst, ist es besonders wichtig auf die Relative Satznummer
der Sunfile zu achten.
jeder Datensatz in einer Subfile hat eine Satznummer. Wenn Du win Write auf eine bestehende Satznummer machst, dann bekommst Du den Fehler.
Ich würde dir vorschlagen dass Du erstmal ein kleines Dummy Programm machst.
1. Subfile Clearen
2. z.B Do 100
mit Subfile schreiben
3. Subfile anzeigen
4. Satzauswahl einer Subfiel (2=Änder/4=Löschen etc.) mit READC
und Update auf Subfilesatz mit RRN
etc.
Da ist besser als direkt mit Daten zu arbeiten.
Naja dann viel Spass
gruss michael

Steven
09-10-02, 09:11
Naja, ich hab das ja nicht allein von neuem Geschrieben. Mein Ausbilder hat mir grob das DSPF gemacht, und auch das PGM geschrieben. Ich muss jetzt nur die oben genannten 3 Funktionen einbauen.

Ich bin jetzt auch schon weiter:

Bei 2 öffnet sich jetzt das "Ändern" WINDOW, aber der Datensatz ist nicht in den Feldern eingetragen. Und wenn ich dann OK drücke kommt "Fortschreiben oder Löschen in Datei ohne vorherige eingabeoperation"
Das gleiche kommt auch wenn ich Löschen will. Das "Löschen Fenster öffnet sich" Ich gebe "J" ein und drücke ENTER. Dann kommt die selbe Fehlermeldung.

Hinzufügen mit F6 funktioniert noch gar nicht. Die Taste ist aber definiert, weil sonst wenn ich sie dürcke ja unten das rote X II kommen würde.

Fuerchau
09-10-02, 10:13
Eigentlich gibts hier ja keine Programmierschulung, aber:

Eine SUBFILE wird betrachtet wie eine normale Datei mit Satznummernzugriff !

Beim Füllen einer Subfile mittels WRITE sollte man die Anzahl geschriebener Sätze in einer Variablen speichern.

In jedem Subfile-Satz wird dann z.b. ein 1-stelliges Auswahl-Feld definiert.
Nach EXFMT des sog. Controlsatzes, kann man mittels READC die, vom Bediener geänderten Sätze abfragen.
Da diese Sätze bereits existieren, kann man sie auch nur mittels UPDAT zurückschreiben !
Wenn also die Daten mittels READC gelesen sind, und in einem anderen Format die Felder identisch definiert sind, läßt sich mittels anschließendem "EXFMTBILDx" und "UPDATSFLRCD" die Änderung wieder zurückschreiben.

Kommen wir zu F6: Ein Hinzufügen zu einer Subfile ist nur mittels WRITE möglich !!

Funktion 4 (Löschen): Ein Löschen von Subfile-Sätzen ist generell nicht möglich !
In solchen Fällen wird normalerweise die Subfile komplett neu gefüllt (da sie ja eigentlich auf einer Datenbankdatei basiert).

Am besten nimmst du die CD "Online-Library" der AS/400 in der sämtliche Handbücher (wahlweise deutsch/englisch) zur Verfügung stehen, und schaust dort im RPG/400-Benutzerhandbuch / RPG/400-User Guide nach.
Dort ist die Subfile-Programmierung an hand von Beispielen gut erklärt !

Steven
09-10-02, 10:36
Also das Problem mit F6 ist gelöst.
Es werden jetzt alle Fenster angezeigt. Ich hab nur noch das Problem mit 2 Fehlermeldungen:

Fortschreiben oder Löschen in Datein ohne vorherige Eingabeoperation. (Bei Ändern und Löschen)

E/A-Fehler CPF5006 in Datei erkannt. (bei Hinzufügen)

Steven
09-10-02, 10:38
Achja

Ich Lösche die Datensätze aus einer Datenbank, und nicht aus der SF


[Dieser Beitrag wurde von Steven am 09. Oktober 2002 editiert.]

B.Hauser
09-10-02, 13:27
Hallo Steven,

Wenn Du eine Subfile füllst hast Du immer nur den zuletzt gelesenen Satz im Zugriff.

Wenn Du aus den angezeigten Sätzen einen auswählst, muss Du den dazugehörigen Datensatz wieder neu einlesen. (CHAIN)
Dazu musst Du in Deiner Subfile entweder die benötigten Schlüssel-Felder oder die relative Satz-Nr. gespeichert haben.

Und dein Ausbilder macht es sich sehr einfach!

Birgitta