2010-12-22 4 views
0

Ich führe eine SELECT-Anweisung in einer SQLite3-Datenbank aus. Wenn das Ergebnis die erste Zeile in der Tabelle sein sollte, ist der Rückgabewert immer SQLITE_DONE anstelle von SQLITE_ROW, und ich kann das Ergebnis nicht erhalten.SQLITE3 step() gibt SQLITE_DONE für eine Tabelle mit nur einer Zeile zurück

do { 
ret.error = sqlite3_step(stmt); 
debug("error: %d",ret.error); 
if(ret.error == SQLITE_ROW) 
{ 
    [...] 
} } while(ret.error != SQLITE_ERROR && ret.error != SQLITE_DONE && 
ret.error != SQLITE_MISUSE); 

Kann mir jemand sagen, was ich falsch mache? (Die Abfrage ist korrekt ...)

+0

Sind Sie 100% sicher, dass der Code innerhalb der inneren "if" -Anweisung ('if (ret.error == SQLITE_ROW)') nie erreicht wird? Wenn "stmt" gültig ist, ist der endgültige Wert von "ret.error" immer SQLITE_DONE. Vorschlag: Was ist die SQL-Anweisung ('stmt'), wie bereiten Sie sie vor und was ist die Zeile in Ihrer Datenbank, die Sie abrufen möchten? –

+0

Ich habe nur den Code neu geschrieben, jetzt scheint es zu funktionieren, nicht sicher, was der Fehler war – tom

Antwort

0

Der Wechsel von "Debug" -Konfiguration zu "Release" löste das Problem für mich.

0

Put:

sqlite3_finalize(statement); 

nach der While-Schleife.