# Problem mit Embedded SQL (IBM DB2)



## Cristok (10. Januar 2005)

Habe folgendes Problem mit dem Embedded Code, hoffe jemand kann helfen.

Erstmal der Code:

```
#include <stdio.h>
#include <string.h>
#include <sqlenv.h>
 
EXEC SQL INCLUDE SQLCA;
 
int main()
{
EXEC SQL BEGIN DECLARE SECTION;
char knr[6], nam[21], rnr[7], von[11], hot[21], kurs[21];

EXEC SQL END DECLARE SECTION;

EXEC SQL CONNECT TO DATABASE;

printf("Aufgabe:\n\n");

EXEC SQL DECLARE CUR1 CURSOR FOR 
 
Hier steht normalerweise die SQL Abfrage;
 
EXEC SQL OPEN CUR1;
 
while (SQLCODE == 0)
{
EXEC SQL FETCH CUR1 INTO :knr, :nam, :rnr, :von, :hot, :kurs;
printf("Kundennummer: %s\n"
"Name: %s\n"
"Reisenummer: %s\n"
"Reisedatum: %s\n"
"Hotel: %s\n"
"Kurs: %s\n\n", knr, nam, rnr, von, hot, kurs);
}
EXEC SQL CONNECT RESET;
return 0;
}
```
 
Die while schleife gibt den letzten Datensatz aus der DB 2 mal raus anstatt nur einmal.
Also es sollen 2 Datensätze angezeigt werden aber der letzte wird 2 mal angezeigt.
Wo der fehler liegen könnte weiß ich selber nicht, hab den schon gesucht aber net gefunden.

Ohne Embedded SQL, also wenn ich die Abfrage normal ausführe gibt er mir nur 2 Datensätze raus, was auch richtig ist.
Das problem taucht wie gesagt nur im Embedded SQL auf.

Greetz
Cristok


----------



## higginsd (30. Mai 2005)

Ja klar: der letzte Fetch aus dem Cursor geht noch gut (sqlcode == 0), dann läuft das Pgm wieder in die Loop, der Fetch geht schief, aber die Ausgabe der Hostvariablen wird noch durchgeführt und zwar mit den "alten" Werten aus dem letzten Fetch.

Lösung: Loop abbrechen (continue) bei sqlcode != 0.

Gruß
Dirk


----------

