Auch die Tabelle sqlite_master für DB und registrierte Funktionen scheint noch verfügbar zu sein. Ist dies nur ein Fall des Zugriffs auf den Speicher, der noch nicht überschrieben wurde, oder schreibt der Prepare Details in den stmt, was bedeutet, dass er später die sqlite3 * Struktur nicht benötigt.SQLite DB geschlossen nach Vorbereitung, aber stmt funktioniert noch?
#include "sqlite3.h"
//---------------------------------------------------------------------------
void Odd(sqlite3_context *ctx,int nargs,sqlite3_value **values)
{
sqlite3_result_int(ctx,sqlite3_value_int(values[0])%2);
}
//---------------------------------------------------------------------------
int _tmain(int argc,_TCHAR* argv[])
{
sqlite3 *DB;
if (sqlite3_open_v2("c:/SQLiteData/MyDB.db",&DB,SQLITE_OPEN_READWRITE,NULL)!=SQLITE_OK)
return 1;
sqlite3_create_function_v2(DB,"Odd",-1,SQLITE_UTF16 | SQLITE_DETERMINISTIC,NULL,
&Odd,NULL,NULL,NULL);
sqlite3_stmt *stmt;
if (sqlite3_prepare16_v2(DB,L"select * from sqlite_master where Odd(rowid)",
-1,&stmt,NULL)!=SQLITE_OK) return 2;
if (sqlite3_close_v2(DB)!=SQLITE_OK) return 3;
int Count=0;
while (sqlite3_step(stmt)==SQLITE_ROW) Count++;
return 0;
}
Danke CL. Ich hatte das nicht gelesen und wurde von der Tatsache geworfen, dass SQLITE_OK zurückgegeben wurde. – NoComprende