In my sample that I supplied I illustrated how two threads does the
following:

Lock (Global Critical Section)
Queryobject.Prepare (Sqlite3_prepare)
QueryObject.Step (Sqlite3_step)
QueryObject.Reset (Sqlite3_reset)
Unlock
QueryObject.Free;  (Sqlite3_reset (the missing piece of the puzzle))

In the above example the call to these 3 functions are locked in a
global critical section, so none of them can be executed at the same
time, 

however:

The last line of code I did not see I had an object that was destroyed
that called sqlite3_reset. This is where the problem lied, the
destructor of the object did something as follows:

Destructor
   If FHandle <> nil then begin
       Sqlite3_reset;
       Sqlite3_finalize; 
       FHandle := nil;     
   end

I understand that the call to sqlite3_reset is a bit pointless in the
destructor here as Sqlite3_finalize takes care of all that, but it is
just interesting to note that by the removal of sqlite3_reset OR by
locking the call to sqlite3_reset it seemed to work, however locking the
call to sqlite3_finalize did not seem to be necessary and did not
produce the SQLITE_MISUSE error.

Hope that is more clear.

-----Original Message-----

I'm not sure I completely understand, but anyway... :)

-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to