Per divertimento personale sto sviluppando una GUI per database SQLite senza uso di ADO o ODBC, ma richiamando direttamente le funzioni di sqlite3.dll, ma ho un comportamento strano.
Ho previsto due classi, una per la gestione del database (ricerca,apertura,chiusura,...) che può richiamare la seconda che è un oggetto recordset e può aprirlo,chiuderlo, trova i tipi dei campi ed i valori del record corrente.
L'apertura del recordset funziona correttamente (sqlite3_prepare_v2), ma quando eseguo la successiva sqlite3_step il programma pensa qualche secondo e poi abortisce senza messaggi di errore. Ho provato ad isolare la lettura in una routine a parte, ma non cambia nulla. La routine ScriviGiornale fa solo un display del messaggio e lo scrive su un file di log. Il valore di ritorno ErrCode vale giustamente 100 dopo la step, ma ha un valore assurdo al rientro della routine Step.
Se invece, con le stesse definizioni delle funzioni e gli stessi richiami, creo una form che fa le stesse operazioni richiamando le funzioni di sqlite3 nello stesso modo ma in una sola routine, tutto funziona perfettamente, quindi non dipende dalla dichiarazione delle funzioni.
Qualche idea?
mnErrCode = sqlite3_prepare_v2(mnDb, s, -1, mnStmt, 0)
.
.
ScriviGiornale ("Prima di NextRec - Errcode=" & mnErrCode)
NextRec
ScriviGiornale ("Dopo NextRec - Errcode=" & mnErrCode)
End Function
Public Sub NextRec()
Dim I As Long, nPtr As Long
.
.
ScriviGiornale ("Prima di richiamo step")
Step
ScriviGiornale ("Rientro da step - Errcode=" & mnErrCode)
End Sub
Private Sub Step()
Dim rc As Long
ScriviGiornale ("Prima di step - Errcode=" & mnErrCode)
rc = sqlite3_step(mnStmt)
mnErrCode = rc
ScriviGiornale ("Dopo step - Errcode=" & mnErrCode)
End Sub