On Oct 10, 2008, at 1:32 PM, [EMAIL PROTECTED] wrote: > > Thank you. I've finally found the problem also thanks to error > message. I haven't called sqlite3_reset() after SQLITE_BUSY so > retrying step() returned MISUSE. But what to do if I'm fetching the > rows for SELECT statement? Reset() would put me to beginning. Can > SQLITE_BUSY (or _LOCK) occur after fetching of 1st row anyway?
SQLITE_BUSY can only occur before fetching the first row. > > > It would be nice to give some example of robust error handling after > sqlite_step() at the web page to show what to do for various errors. > (Errors are not described in detail in the documentation, only their > cause but not appropriate retry action). > > But users are reporting also other strange errors after > sqlite_step() which I cannot reproduce, like: > > - SQLITE_NOMEM (after "Select count(*) where...". I don't believe > there is really no free memory, I cannot see any memory leaks in > application, whole database file has maybe 10-20 MB). How to handle > this? SQLITE_NOMEM is only returned when SQLite is unable to allocate the memory it needs. > > - SQLITE_CANTOPEN - I've added the same handler for this - > Sleep(...), retry. Is it correct? Do I need to call reset() too? Usually this is returned when the underlying operation system call is unable to open the file. Often that means a file permission problem, in which case sleeping is unlikely to help. This can also be returned if the filename is too long. > > > - SQLITE_ERROR after COMMIT although I'm using prepare_v2() which is > documented to return specific error code instead of SQLITE_ERROR. > reset() returned the same code. SQLITE_ERROR is returned if there is a syntax error in the SQL. Often sqlite3_errmsg() will provide more information. What does it say? > > > Thank you! > > On May 13, 2008, at 7:57 AM, [EMAIL PROTECTED] wrote: > >> >> I‘m running ATTACH database on SQlite 3.5.8 on windows. >> I‘m opening one database >> file and attaching the second one. >> On my computer it works, but it fails at other computer. The >> database is opened in more >> than one thread (it is failing in worker thread). >> sqlite3_step() returns SQLITE_MISUSE , but _sqlite3_errmsg() returns >> "database is locked". >> What can be the problem? > > My guess is that SQLITE_MISUSE is being returned when you try to do > something with a prepared statement that has been finalized or a > database connection that has been closed. The error checking to > detect these things and return SQLITE_MISUSE is probabilistic - it is > not guaranteed to succeed. But when it does, it is helpful in finding > application errors. > > SQLITE_MISUSE returns do not set the error message. So > sqlite3_errmsg() will continue to return the previous error, whatever > that was. > > D. Richard Hipp > [EMAIL PROTECTED] > > > D. Richard Hipp [EMAIL PROTECTED] _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users