PDA

View Full Version : SQL überträgt unvollständig



Armin
10-05-06, 08:34
Guten Morgen zusammen.
SQL im ILE-Programm spinnt!
select * from Datei ... (brauch nahezu alle Felder)
Enthalten sind u.a. 4 Datumsfelder. Das 1. wird übertragen, die nächsten 3 fehlen. Die Compilerliste zeigt, dass die entsprechenden generierten SQL_xxxx Felder angeblich nicht verwendet werden. Code 7031.
Was soll das?:confused:

Fuerchau
10-05-06, 08:38
Dazu müsstest du mal ins Listing des Compilers schauen.
Ohne weitere Hinweise kann man nichts erkennen.

Armin
10-05-06, 09:14
328 D DS OPEN
364 D SQL_00034 225 232D DATFMT(*DMY.) FABEDA
365 D SQL_00035 233 240D DATFMT(*DMY.) FALSDA
366 D SQL_00036 241 248D DATFMT(*DMY.) FAFADA
367 D SQL_00037 249 256D DATFMT(*DMY.) FAVADA
453 D SQL_00087 821 822B 0 SQLANZEIGER1

1415 C SQL_00087 IFGE 0 SQL B04
1416 C EVAL FABEDA = SQL_00034 SQL 04
1417 C END SQL E04
1418 C EVAL SQLANZEIGER1 = SQL_00087 SQL 03

*RNF7031 SQL_00035 D(8*DMY.) 365D
*RNF7031 SQL_00036 D(8*DMY.) 366D
*RNF7031 SQL_00037 D(8*DMY.) 367D

*RNF7031 00 373 Kein Verweis auf den Namen oder die Bezugszahl/den Anzeiger
vorhanden.

Fuerchau
10-05-06, 09:53
Da du einen "Select *" kodierst, wie sieht denn da dein Fetch aus ?
Wenn du die Felder einzeln aufführst, beachte ob nicht irgendwo Kommatas fehlen.
Mit obigen Angaben kann ich nichts anfangen.

Armin
10-05-06, 10:06
C*EXEC SQL
C* declare FAKTURS1cursorPack cursor for
C* select * from FAKTURS1 join AUKOPF on FAABNR = AKBELE
C* where FASTAT = 5 and FALSNR = :FAKTUDUR_LSNr
C* and AKBKZ = :FAKTUDUR_BKz and AKCOU = :FAKTUDUR_Couz
C* and AKFRB = :FAKTUDUR_Funr and AKMRB = :FAKTUDUR_Musr
C* and AKSRB = :FAKTUDUR_Star and AKVAL = :FAKTUDUR_Valu
C* order by FAPACK
C*END-EXEC

C*EXEC SQL
C* OPEN FAKTURS1cursorPack
C*END-EXEC

C*EXEC SQL
C* fetch next from FAKTURS1cursorPack into :FAKTURS1sql :SqlAnzeiger1,
C* :AUKOPFsql :SqlAnzeiger2
C*END-EXEC

Das Zielfeld ist eine Datenstruktur im Aufbau des Datensatzes.

Fuerchau
10-05-06, 10:13
Das geht so leider nicht !
Wenn ein Fetch in eine DS erfolgen soll, so sind max. 2 Strukturen erlaubt:
fetch ... into :myds [:myanz]
Wobei der Anzeiger eine Tabelle sein muss.

Werden mehrere Felder angegeben, nimmt der SQL-Precompiler Einzelfelder an.

Da dein Select ein Join ist, musst du eine Struktur mit ALLEN Feldern angeben und eine Anzeiger-Tabelle mit der Anzahl der Felder.
Oder du musst dir die Mühe machen und alle Felder einzeln im Fetch benennen.

Armin
10-05-06, 12:36
Vielen Dank für die Info.
Merkwürdig ist, dass meine Syntax in anderen Programmen ihren Dienst versieht.

Nachdem ich jetzt Einzelfelder definierte, klappt es tatsächlich. Es gibt viele Stolperfallen - suchen wir die nächste.

Besten Dank
Armin

Fuerchau
10-05-06, 12:57
Mit nur einer Struktur klappts ja auch !