PDA

View Full Version : SQLRPGLE - Umwandlungsparameter?



Tobse77
23-05-05, 12:43
Hallo zusammen,

habe ein Problem mit einem SQLRPGLE-Modul.

Folgender Code:

C/EXEC SQL
C+ DELETE FROM GTSDRK WHERE GSLIJA = :d#JJJJ and GSLIMO = :d#MM
C/END - EXEC

Dieser Code SOLLTE bestimmte Datensätze in einer DB-Datei GTSDRK löschen. In Variable GSLIJA steht das Jahr (z. B. 2005) und in Variable GSLIMO steht der Monat ( z. B. 5).

Dies funktioniert leider nicht, denn im Debugger habe ich erkannt, dass mit F11 auf :d#MM die Nachricht "Variable nicht gefunden" erscheint. F11 auf :d#JJJJ zeigt mir den korrekten Wert 2005.
Wenn ich ohne im Programmcode weiterzugehen mit F11 auf die Variable p#MM irgendwo anders im Quellcode abfrage, so bekomme ich den richtigen Wert angezeigt (5) !?!!

Vor der Modulumwandlung, aufgrund Änderungen an ANDEREN Statements, hat dieses Statement noch funktioniert !!
Könnte ich irgendwelche Parameter beim Umwandeln vergessen haben ??

Vielen Dank für eure Hilfe


P.S.: Ich habe inzwischen auch schon das nicht geänderte Originalmodul nochmals umgewandelt ... Ergebnis: Es funktioniert auch nicht. Da liegt es wohl nahe, dass nicht meine Änderungen im Programm dazu führten, sondern meine Umwandlungsmethode, oder ??


mfG,
Tobias

B.Hauser
23-05-05, 13:37
Hallo zusammen,

habe ein Problem mit einem SQLRPGLE-Modul.

Folgender Code:

C/EXEC SQL
C+ DELETE FROM GTSDRK WHERE GSLIJA = :d#JJJJ and GSLIMO = :d#MM
C/END - EXEC

Dieser Code SOLLTE bestimmte Datensätze in einer DB-Datei GTSDRK löschen. In Variable GSLIJA steht das Jahr (z. B. 2005) und in Variable GSLIMO steht der Monat ( z. B. 5).

Dies funktioniert leider nicht, denn im Debugger habe ich erkannt, dass mit F11 auf :d#MM die Nachricht "Variable nicht gefunden" erscheint. F11 auf :d#JJJJ zeigt mir den korrekten Wert 2005.
Wenn ich ohne im Programmcode weiterzugehen mit F11 auf die Variable p#MM irgendwo anders im Quellcode abfrage, so bekomme ich den richtigen Wert angezeigt (5) !?!!

Vor der Modulumwandlung, aufgrund Änderungen an ANDEREN Statements, hat dieses Statement noch funktioniert !!
Könnte ich irgendwelche Parameter beim Umwandeln vergessen haben ??

Vielen Dank für eure Hilfe


P.S.: Ich habe inzwischen auch schon das nicht geänderte Originalmodul nochmals umgewandelt ... Ergebnis: Es funktioniert auch nicht. Da liegt es wohl nahe, dass nicht meine Änderungen im Programm dazu führten, sondern meine Umwandlungsmethode, oder ??


mfG,
Tobias

Die Host-Variable heißt nicht :IrgendWas, sondern nur IrgendWas. Wenn Du mit STRDBG arbeitest, dann gib auf der Befehlezeile einfach EVAL IrgendWas an und du bekommst den Inhalt der Variablen IrgendWas angezeigt.

Ansonsten würde ich Dir raten mal nachzuschauen was in SQLCOD oder SQLSTT drin steht. (Funktioniert ebenfalls mit EVAL). Ist der SQLCOD < 0 , liegt ein SQL-Fehler vor. Ist der SQLCOD = 100 wurde kein Satz gefunden.

Ausserdem mal den alten Trick versuchen sich ab- und wieder anzumelden und die Bibliotheks-Liste prüfen. Vielleicht hast Du das Programm ja in eine falsche Umgebung umgewandelt o.a.

Birgitta

Tobse77
23-05-05, 16:41
Die Host-Variable heißt nicht :IrgendWas, sondern nur IrgendWas. Wenn Du mit STRDBG arbeitest, dann gib auf der Befehlezeile einfach EVAL IrgendWas an und du bekommst den Inhalt der Variablen IrgendWas angezeigt.

Ansonsten würde ich Dir raten mal nachzuschauen was in SQLCOD oder SQLSTT drin steht. (Funktioniert ebenfalls mit EVAL). Ist der SQLCOD < 0 , liegt ein SQL-Fehler vor. Ist der SQLCOD = 100 wurde kein Satz gefunden.

Ausserdem mal den alten Trick versuchen sich ab- und wieder anzumelden und die Bibliotheks-Liste prüfen. Vielleicht hast Du das Programm ja in eine falsche Umgebung umgewandelt o.a.

Birgitta


Vielen Dank für die Antwort Birgitta,

leider kommt dies nicht so ganz hin. Wie schon zuvor gesagt, mit F11 auf die gleiche Variable innerhalb des Quellcodes kommt der richtige Wert. Und wenn ich auf dieses :d#JJJJ mit F11 tippe, dann kommt auch das richtige Jahr !!
Mit eval d#MM kommt selbstverständlich der richtige Wert.
In SQLCOD kommt 077952576 und in SQLSTT kommt nur *blanks (also: ' ').
Die Bibliotheksliste ist absolut i.O., denn zu einem späteren Zeitpunkt in der Ausführung schreibt das Modul auch in diese Datei !! Das Löschen soll die zuvor bestehenden "falschen" Datensätze eliminieren, bevor die "Richtigen" geschrieben werden, um keine Redundanz zu erzeugen (bezügl. Rechnungsstellung).
Bin zwar beruhigt, dass es nicht an meinen geänderten Statements liegt, denn mit dem alten Code funktionierts ja auch nicht mehr, aber es MUSS wohl an den Umwandlungsparametern liegen, denn es hat vor meiner Umwandlung definitiv schon mal geklappt !!!
Über weitere Tips und Ratschläge würde ich mich sehr freuen !!!
mfG,
Tobias

B.Hauser
23-05-05, 16:54
Hallo,

wird Deine Datei im Journal aufgezeichnet?
Wenn nein, solltest Du den Parameter COMMIT im CRTSQLRPGI auf *NONE setzen. (Unterlassungs-Wert ist *CHG)

Besser ist allerdings in die Quelle ein SET OPTION-Statement einzufügen, das diesen Parameter zum Umwandlungs-Zeitpunkt setzt. Dann wird's auch beim nächsten Mal nicht vergessen.


C/EXEC SQL Set Option Commit = *NONE
C/END-EXEC


Wann hast Du eigentlich den SQLCOD abgefragt? Vor oder nach dem DELETE-Statement? Nach den Dummy-Werte zu urteilen davor. Beide Variablen werden erst durch das Ausführen eines SQL-Statements gesetzt.

Birgitta

Fuerchau
23-05-05, 16:57
Mit Sicherhet liegts nicht an irgendwelchen Parametern der Umwandlung !
Bist du denn sicher, dass das auszuführende Modul mit der angezeigten Quelle identisch ist ?
Ein Wert SQLCOD = 077952576 ist vollkommen unmöglich.

Prüfe mal die Umwandlungsliste !

Tobse77
23-05-05, 17:15
Bin mir sicher, dass das ausgeführte Modul zur Quelle passt, denn es stehen meine Änderungskennzeichen drin. Habe das Modul nach der Änderung mit 15 umgewandelt und danach mit UPDPGM in den relevanten Programmen aktualisiert.

Leider bin ich ein ziemlicher SQL-Laie und mit dem ILE-Konzept auch nicht so vertraut. Das Programm wurde von ukrainischen Spezialisten geschrieben.
Übrigens: Wenn ich den besagten SQL-Befehl nach strsql eingebe (natürlich ohne Variablen, sondern mit den korrekten Werten), dann funktionierts !!

Werde jetzt das SQL-Statement entfernen und stattdessen mit den Variablen einen SETLL machen und per Schleife die Delete-Operation durchführen. Manche sind schließlich auch schon in Eleganz gestorben ;)

Trotzdem Vielen Dank für eure Hilfe; wirklich ein tolles Forum !!


mfG,
Tobias

mk
24-05-05, 08:56
Hallo Tobias,


prüfe ggf. nochmal ob und wo deine Variablen definiert sind.
Vielleicht handelt es sich um lokale Varaiblen die nicht korrekt gefüllt sind.
Gruss
Michael