On 5 Oct 2010, at 11:46am, Serena Lien wrote:

> On a windows vista/win7 machine or a laptop which goes into sleep mode, when
> it resumes and the application tries to open a database on a networked
> drive, the open function returns SQLITE_CANTOPEN and SQLITE_IOERR. I don't
> have a problem with this, if the OS has lost access to the network I can
> imagine SQLITE_IOERR is quite valid. My question is, is there any way to
> recover now from this error without forcing my application to exit and
> restart? Any number of retries using sqlite3_open_v2 always continue to fail
> with SQLITE_IOERR.

SQLite doesn't do anything if you don't have any connections open.  So as far 
as SQLite is concerned, there's absolutely no difference between

start application
sleep
wakeup
sqlite3_open_v2()

and

start application
sleep
wakeup
quit application
restart application
sqlite3_open_v2()

There's just no way for SQLite to tell the difference between these two states. 
 So if something is stopping your application from accessing a file until it 
has been restarted, it's a function of the operating system rather than 
something that SQLite is doing.  However, are you perhaps doing

start application
sqlite3_open_v2()
sleep
wakeup
// Oh, my open connection is now useless, I need one that works !
sqlite3_open_v2()

I can imagine that failing because SQLite thinks it already has a working 
connection to that database.  The cure would be to use sqlite3_close() before 
the new _open, though I'm not sure whether you'd have an appropriate connection 
you could use with it.  Another problem with this is that if you have a 
prepared statement for a connection, you can't close it.  You have to finalize 
first.

Simon.
_______________________________________________
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to