PDA

View Full Version : 2. SQL bringt keine Daten



Booley
17-05-04, 13:03
Hallo zusammen,

ich habe folgendes Problem:

Ich erstelle in einem SQL-LE Programm dynamisch in einer Unterroutine einen String für ein Select und lasse diesen dann ausführen. Für jeden gefundenen Satz folgt ein INSERT.

Klappt soweit alles wunderbar.

Wenn ich jetzt den String ändere und die gleiche Routine wieder aufrufe, kommen keine Daten mehr. Der SQL String ist korrekt, habe ich getestet. Es funktioniert aber immer nur der Erste.

Muss ich irgendwas initialisieren, damit ich einen zweiten SELECT absetztn kann?

Meinen Reihenfolge:

1) String zusammenketten
2) Prepare
3) decalre
4) open
5) fetch (bis EOF)
6) commit

Was fehlt?

Booley

B.Hauser
17-05-04, 13:24
Hallo Booley,

Dir fehlt der Close!

Du hast einen seriellen Cursor definiert, d.h. es werden alle Sätze sequentiell abgearbeitet. Du hast keine Möglichkeit z.B. einen Satz zurückzugehen.
Sind alle Sätze abgearbeitet bleibt der Cursor am Ende stehen.
Im Gegensatz zum RPG, bei dem durch ein SetLL der Pointer neu positioniert wird, ist beim seriellen SQL-Cursor ein erneuter OPEN wirkungslos, solange der Cursor geöffnet ist.

Also nach dem Abarbeiten aller Fetch's den Cursor mit CLOSE schliessen. Dann kann durch einen erneuten OPEN die Verarbeitung neu beginnen.

Birgitta

Fuerchau
17-05-04, 13:26
Solange der Cursor geöffnet ist, kann das Statement nicht geändert werden.
Ob der Commit den Cursor schließt, hängt von deinen Optionen ab (set option).

Wenn du mit Commit=*None arbeitest, kann ein Statement leider nur 1 Mal dynamisch erstellt werden, bis das Programm / die Aktivierungsgruppe endet.

Booley
17-05-04, 13:57
Oh mann, natürlich! *augenwiederaufmach*

Danke!

Booley