On 2014/02/22 00:32, Geo Wil wrote:
1. Windows 7 Ultimate 64-bit

2. Here is the path I am using:
void Database::openSave(bool* bErrors)
{
     if (sqlite3_open("*scSave.sqlite*",&dBase) != SQLITE_OK)
     {
         *bErrors = true;
         createBInfo();
         d.createBReport("SQL Code 1",sqlite3_errmsg(dBase),bLocale +
to_string(__LINE__),bTDate,"./SC_Log.txt");
     }

     else
     {
         *bErrors = false;
     }
}

3. I checked that earlier today as well as the permission on the database
itself.  Everything checks out.

4. Here you inspired me to do some extra digging.  I added some couts to
the player data transaction block in the event that error is not null and I
got an error of "Database is Locked".  This was surprising because I have
no programs open that have my save database open and the only other call to
the database before the transaction block starts is the openSave function
listed above.


That path doesn't seem like a path, but just a call to open a filename, which should be in the same folder as the exe. Now, depending on where the exe is in Win7, that could be a problem. If your exe is in any of the protected or system folders (such as Program_files), Windows won't let you edit files in those places, it might simply shift the file to the virtualized folder and open it there, which usually works ok and very much transparent to your app - unless you are trying to force the full path in an open statement, such as SQLite should be doing. This may explain why the permission seem ok but the physical file is locked when you try to open it.

The way to fix this is to use the correct program data path (typically "c:\users\myUser\AppData\Roaming\MyProgramName\") or the user's documents folder (should you want this file to be handled by the user at some point), in stead of the exe path - and/or to let Windows know that you know what you are doing and expect your datafiles to be changed by specifying a manifest to your exe with appropriate settings - just MSDN "Manifest file" for examples.

btw: Getting the path to the correct program data path on any PC requires simply a call to the Windows Shell API with the correct parameter, again just MSDN it.

Good luck!

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

Reply via email to