Re: [sqlite] Delete From Not Working Properly

2014-02-21 Thread Geo Wil
I got it working finally.  There were several problems that were all
contributing and it was not until Kees suggested looking at the
begins/commits to see if errors were happening that I saw the whole
picture.  As mentioned in my past response to the thread, the code worked
when saving after starting a new game but not after loading an already
started game.  The problem was both in the loading code and in the way in
which I was loading the data through my calls in my Database class.

In my loading code I have several areas where I must close and re-open a
connection to the database because of how some things are loaded (some
elements are loaded in as only ID values which I then get the data for from
my Database sqlite file which contains non-player/game instance specific
data like weapons information or message).  Well there was a problem here
where the database connection could not be closed because there were
unfinalized statements.  This is where the second area of problems comes
in.  I was not placing my calls to my finalize function at the end of the
query functions.  This meant that if there was a problem, finalize would
not be called and the prepared statement would not be destroyed.

Another problem was in my getRows function.  The same issue as above
existed except that there were multiple chances for the statement to not be
finalized as I was returning 0 at any point an error was found.  After
placing the calls to finalize in their correct places I found the final
thorn in my program which were the database closes in dataSystem in lData.
I had them setup so that they would be called even if the database was not
actually closed.  This caused even more problems by invalidating previous
database connections and creating new ones.  The end result was that by the
time sData in Database was called the database connection was mutilated.

Fixed everything up and ran the loading process and I was able to rid
myself of several bugs at once including getting the Delete From query to
execute properly.

Thanks for the suggestions and feedback you have all given me, it helped
tremendously.


On Fri, Feb 21, 2014 at 2:15 PM, Geo Wil <geowi...@gmail.com> wrote:

> Hello,
>
> Yesterday, while working on my game, I noticed that my game data was not
> updating in my save SQLite3 database.  So I started tracking down what was
> going on and eventually my search lead me to my dData function.
>
> How this function works is that you pass a table name and a bool, the bool
> is just there in case errors happen to notify the player.  I did exhaustive
> tests yesterday on this block of code and found that it was not functioning
> properly, it was not deleting the data from my tables.
>
> I checked to see if sqlite3_step was producing an error but it was sending
> back a value of 101 or SQLITE_DONE but the table data remained unchanged.
> I also commented out the code I use to replace the deleted data just to
> make sure the data retrieval code was not at fault.  With just the dData
> call and nothing else the data still would not delete from the table.
>
> Here is the code I am using for my dData function:
>
> void Database::dData(string table, bool* bErrors)
> {
> sqlStr2 = "Delete From " + table;
>
> sqlite3_exec(dBase,"BEGIN TRANSACTION",NULL,NULL,);
>
> if (sqlite3_prepare_v2(dBase, sqlStr2.c_str(), sqlStr2.size(),
> , 0) == SQLITE_OK)
> {
> sqlite3_step(statement2);
> *bErrors = false;
>
> finalize(statement2, bErrors);
> }
>
> else
> {
> *bErrors = true;
> createBInfo();
> d.createBReport("SQL Code 3",sqlite3_errmsg(dBase),bLocale +
> to_string(__LINE__),bTDate,"./SC_Log.txt");
> }
>
> sqlite3_exec(dBase,"END TRANSACTION",NULL,NULL,);
> }
>
> I am also going to link to my save database in case it itself is to blame
> although I tested this on several different files with the same results.
>
> http://sc.lmpgames.com/scSave.sqlite
>
> I already have posted about this on StackOverflow and so far everyone that
> has attempted to figure this out has been stumped.  I am using Microsoft
> Visual Studio 2012 and C++.
>
> Thanks.
>
> --
> "I though what I'd do was, I'd pretend I was one of those Deaf-Mutes...Or
> should I?" -- Laughing Man
> __
>
> Laughing Man Productions² Entertainment and Gaming 
> Network<http://www.lmpgames.com>
>



-- 
"I though what I'd do was, I'd pretend I was one of those Deaf-Mutes...Or
should I?" -- Laughing Man
__

Laughing Man Productions² Entertainment and Gaming
Network<http://www.lmpgames.com>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Delete From Not Working Properly

2014-02-21 Thread Geo Wil
I thought of another possible reason why this is going on.  The code in
question works under one set of circumstances and not under another.  If
there is no data in my database then I am able to save data.  This begged
the question "why?" and the answer is because I do not load my data if I
start a new game.  I have been looking at my lData code in my dataSystem
class and I found that I am getting errors there too when trying to close
my database connection from there.  This, I think, is why I am getting
locked out during the save process.  I am going to try updating the code in
lData and see what happens.

As for the fail path issue, it is not an issue or at least it has never
been for me.  The way I understand it is that if you just put the file name
into a function requesting a path in Windows it will look in the folder the
process is running from for that file.  Although you are right, I should be
a bit more explicit with the path, maybe use ./Databases/[filename] so that
it will explicitly look in the same folder and not have to use a default
behavior that can sometimes be fallible.

Thanks for the suggestions.  Will post back what the results of my work
with lData are.


On Fri, Feb 21, 2014 at 3:59 PM, RSmith <rsm...@rsweb.co.za> wrote:

>
> 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*",) != 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
>



-- 
"I though what I'd do was, I'd pretend I was one of those Deaf-Mutes...Or
should I?" -- Laughing Man
__

Laughing Man Productions² Entertainment and Gaming
Network<http://www.lmpgames.com>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


Re: [sqlite] Delete From Not Working Properly

2014-02-21 Thread Geo Wil
1. Windows 7 Ultimate 64-bit

2. Here is the path I am using:
void Database::openSave(bool* bErrors)
{
if (sqlite3_open("*scSave.sqlite*",) != 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.



On Fri, Feb 21, 2014 at 3:06 PM, Kees Nuyt <k.n...@zonnet.nl> wrote:

> On Fri, 21 Feb 2014 14:15:10 -0700, Geo Wil <geowi...@gmail.com>
> wrote:
>
> >Hello,
> >
> >Yesterday, while working on my game, I noticed that my game data was not
> >updating in my save SQLite3 database.  So I started tracking down what was
> >going on and eventually my search lead me to my dData function.
> >
> >How this function works is that you pass a table name and a bool, the bool
> >is just there in case errors happen to notify the player.  I did
> exhaustive
> >tests yesterday on this block of code and found that it was not
> functioning
> >properly, it was not deleting the data from my tables.
> >
> >I checked to see if sqlite3_step was producing an error but it was sending
> >back a value of 101 or SQLITE_DONE but the table data remained unchanged.
> >I also commented out the code I use to replace the deleted data just to
> >make sure the data retrieval code was not at fault.  With just the dData
> >call and nothing else the data still would not delete from the table.
> >
> >Here is the code I am using for my dData function:
> >
> >void Database::dData(string table, bool* bErrors)
> >{
> >sqlStr2 = "Delete From " + table;
> >
> >sqlite3_exec(dBase,"BEGIN TRANSACTION",NULL,NULL,);
> >
> >if (sqlite3_prepare_v2(dBase, sqlStr2.c_str(), sqlStr2.size(),
> >, 0) == SQLITE_OK)
> >{
> >sqlite3_step(statement2);
> >*bErrors = false;
> >
> >finalize(statement2, bErrors);
> >}
> >
> >else
> >{
> >*bErrors = true;
> >createBInfo();
> >d.createBReport("SQL Code 3",sqlite3_errmsg(dBase),bLocale +
> >to_string(__LINE__),bTDate,"./SC_Log.txt");
> >}
> >
> >sqlite3_exec(dBase,"END TRANSACTION",NULL,NULL,);
> >}
> >
> >I am also going to link to my save database in case it itself is to blame
> >although I tested this on several different files with the same results.
> >
> >http://sc.lmpgames.com/scSave.sqlite
> >
> >I already have posted about this on StackOverflow and so far everyone that
> >has attempted to figure this out has been stumped.  I am using Microsoft
> >Visual Studio 2012 and C++.
>
> Which version of MS Windows?
> What is the path to the database file?
> Is the database perhaps stored in a "protected" directory?
> Any errors on execution of the BEGIN and COMMIT statements?
>
> --
> Groet, Cordialement, Pozdrawiam, Regards,
>
> Kees Nuyt
>
> ___
> sqlite-users mailing list
> sqlite-users@sqlite.org
> http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users
>



-- 
"I though what I'd do was, I'd pretend I was one of those Deaf-Mutes...Or
should I?" -- Laughing Man
__

Laughing Man Productions² Entertainment and Gaming
Network<http://www.lmpgames.com>
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users


[sqlite] Delete From Not Working Properly

2014-02-21 Thread Geo Wil
Hello,

Yesterday, while working on my game, I noticed that my game data was not
updating in my save SQLite3 database.  So I started tracking down what was
going on and eventually my search lead me to my dData function.

How this function works is that you pass a table name and a bool, the bool
is just there in case errors happen to notify the player.  I did exhaustive
tests yesterday on this block of code and found that it was not functioning
properly, it was not deleting the data from my tables.

I checked to see if sqlite3_step was producing an error but it was sending
back a value of 101 or SQLITE_DONE but the table data remained unchanged.
I also commented out the code I use to replace the deleted data just to
make sure the data retrieval code was not at fault.  With just the dData
call and nothing else the data still would not delete from the table.

Here is the code I am using for my dData function:

void Database::dData(string table, bool* bErrors)
{
sqlStr2 = "Delete From " + table;

sqlite3_exec(dBase,"BEGIN TRANSACTION",NULL,NULL,);

if (sqlite3_prepare_v2(dBase, sqlStr2.c_str(), sqlStr2.size(),
, 0) == SQLITE_OK)
{
sqlite3_step(statement2);
*bErrors = false;

finalize(statement2, bErrors);
}

else
{
*bErrors = true;
createBInfo();
d.createBReport("SQL Code 3",sqlite3_errmsg(dBase),bLocale +
to_string(__LINE__),bTDate,"./SC_Log.txt");
}

sqlite3_exec(dBase,"END TRANSACTION",NULL,NULL,);
}

I am also going to link to my save database in case it itself is to blame
although I tested this on several different files with the same results.

http://sc.lmpgames.com/scSave.sqlite

I already have posted about this on StackOverflow and so far everyone that
has attempted to figure this out has been stumped.  I am using Microsoft
Visual Studio 2012 and C++.

Thanks.

-- 
"I though what I'd do was, I'd pretend I was one of those Deaf-Mutes...Or
should I?" -- Laughing Man
__

Laughing Man Productions² Entertainment and Gaming
Network
___
sqlite-users mailing list
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users