NewsGroup .... gmane.comp.db.sqlite.general
Subject ...... Loading Data
Date ......... 2011-07-28
Post_By ...... Daniel Spain
Edit_By ...... Stanley C. Kitching
I added some white space and new-line characters
to Daniel's original post using a first pass
through Python and a second pass though vim.
# --------------------------------------------------------
hey all.
i got my engine to compile so now im doing basic SQL syntax
of load the user, since its in a very early production stage
the players table only has 4 values to load.
Table : Players
UserID varchar( 30 ) /* their constant userid */
Race smallint /* their race number */
Class smallint /* their class number */
Loaded smallint /* character was loaded ? */
when a user hits 'P' to play from the mainmenu
the program executes loaduser()
this queries the database and loads their user data,
and if it does not exist it will insert an initial record.
i've tried this a bunch of different ways
that result in false queries or inserting multiple records
with the same username.
i'll post what im doing and someone can point me
in the right directi on
/* snippet from SQLMUD.C */
player = &player_data[ usrnum ] ;
if ( ( margc == 1 ) && ( toupper( margv[ 0 ][ 0 ] ) == 'P' ) )
{
/* menu command to play the game */
loaduser() ;
if ( player->loaded )
{
pmlt( "I loaded your character record. \r" ) ;
}
else
{
pmlt( "I did not load your character record,
creating a new one.\r" ) ;
}
}
/* snippet from MUDUSER.C */
VOIDloaduser( VOID )/*
load character data */
{
sqlite3 *database ;
sqlite3_stmt *statement ;
const CHAR *tail ;
INT rc ;
usaptr = &usroff( usrnum ) ;
/* lets open the database */
rc = sqlite3_open( "SQLMUD.DB" , &database ) ;
/* error: unable to establish connection */
if ( rc != SQLITE_OK )
{
pmlt( "I was unable to establish a connection
to the database! Exiting. \r" ) ;
return ;
}
/* create a query string */
sprintf(
vdatmp ,
"select * from Players where UserID = '%s'" ,
usaptr->userid ) ;
rc = sqlite3_prepare_v2(
database , vdatmp , INPSIZ , &statement , &tail ) ;
if( rc != SQLITE_OK )
{
// did not query i think here is
// where i insert a new character record ?
pmlt( "Could not query you in the database,
i think i need to insert. \r" ) ;
sqlie3_close( database ) ;
return ;
}
player->loaded = 0 ;
while( sqlite3_step( statement ) == SQLITE_ROW )
{
pmlt( "LOAD: USERID = %s \r" ,
sqlite3_column_text( statement , 0 ) ) ;
pmlt( "LOAD: RACE = %s \r" ,
sqlite3_column_text( statement , 1 ) ) ;
pmlt( "LOAD: CLASS = %s \r" ,
sqlite3_column_text( statement , 2 ) ) ;
pmlt( "LOAD: LOADED = %s \r" ,
sqlite3_column_text( statement , 3 ) ) ;
strncpy( player->userid ,
sqlite3_column_text( statement , 0 ) , UIDSIZ ) ;
player->race = atoi( sqlite3_column_text( statement , 1 )) ;
player->class = atoi( sqlite3_column_text( statement , 2) ) ;
player->loaded = atoi( sqlite3_column_text( statement , 3 ) ) ;
} sqlite3_finalize( statement ) ;
sqlite3_close( database ) ;
}
so what im trying to accomplish is :
when they hit the menu command 'P'
it loads their data.within loaduser()
i want it to query the database for them by name.
if it dont exist create an initial record
containing default dataelse load their data.
the user flag 'loaded' tells the game
to either create a newcharacter
or enter with the loaded data.
i got several other samples
i been playing with
but ill start with this one
to get pointed in the right direction. ;
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users