Hello Lloyd,

I gave you the answer, you just don't want to use it. Generating SQL
this way is painful, messy and error prone. SQLite already has a far
better mechanism for doing it using late binding of the parameters.

How about learning the right way to do this?

I'll give you a hint though

           sql += "','";
           sql += "details.statime";
           sql += "','";
...

should work
You could do it with sprintf too and/or some IO stream thing but, I
never use them.

Conrad




Saturday, September 9, 2006, 9:41:01 PM, you wrote:

LT> if I could somehow create the following string as a char i cpuld probably
LT> get the code to work.
LT>           sql = "insert into call_data (direction, call_time, dest,
LT> trunk_no, file_name)values('";
LT>           sql += details.inout;
LT>           sql += "','";
LT>           sql += details.statime;
LT>           sql += "','";
LT>           sql += details.cidn;
LT>           sql += "'";
LT>           sql +=details.channel;
LT>           sql += "','";
LT>           sql += details.filename;
LT>           sql += "')";
LT> I am getting stuck adding exist chars to the sql char

                                                                             
LT>                defined chars
                                                                             
LT>              ^                    ^
LT> sql = "insert into call_data(direction, 
LT> call_time)values('details.inout','details.statime)"
LT> Do you have any ideas?

LT> Lloydie T


LT> ----- Original Message ----- 
LT> From: "Teg" <[EMAIL PROTECTED]>
LT> To: "Lloyd Thomas" <sqlite-users@sqlite.org>
LT> Sent: Sunday, September 10, 2006 12:47 AM
LT> Subject: Re[2]: [sqlite] A lillte help adding sqlite to a c program


>> Hello Lloyd,
>>
>> You need to escape the quotes. Remember in C and C++ " means the
>> beginning or end of a literal string so, when you want to embed quotes
>> in a string you have to escape them. Probaby \".
>>
>> You'd be better off using the paramaterized version of the SQL
>>
>> std::string sql = "insert into call_data (direction, call_time, dest,
>> trunk_no,
>> file_name)values(?,?,?,?,?);";
>>
>> Then bind the actual parameters after the fact.
>>
>> C
>>
>>
>> Saturday, September 9, 2006, 7:02:43 PM, you wrote:
>>
>> LT> Jay, Thanks for your reply.
>> LT> I gave it a try with and got a few errors. as follows
>> LT> ---------------------------------------------------------------
>> LT> logger.cpp:609: error: invalid operands of types `const char[80]' and
>> LT> `char[4]' to binary `operator+'
>> LT> logger.cpp:615: error: `t' was not declared in this scope
>> LT> logger.cpp:615: warning: unused variable 't'
>> LT> logger.cpp:634: error: jump to case label
>> LT> logger.cpp:631: error:   crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error:   crosses initialization of `std::string test1'
>> LT> logger.cpp:637: error: jump to case label
>> LT> logger.cpp:631: error:   crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error:   crosses initialization of `std::string test1'
>> LT> logger.cpp:638: error: jump to case label
>> LT> logger.cpp:631: error:   crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error:   crosses initialization of `std::string test1'
>> LT> logger.cpp:639: error: jump to case label
>> LT> logger.cpp:631: error:   crosses initialization of `std::string test2'
>> LT> logger.cpp:628: error:   crosses initialization of `std::string test1'
>> LT> logger.cpp:641: error: `t' was not declared in this scope
>> LT> logger.cpp:641: warning: unused variable 't'
>> LT> logger.cpp:664: error: jump to case label
>> LT> logger.cpp:621: error:   crosses initialization of `bool Loop'
>> LT> logger.cpp:634: warning: destructor needed for `test2'
>> LT> logger.cpp:634: warning: where case label appears here
>> LT> logger.cpp:634: warning: (enclose actions of previous case statements
>> LT> requiring destructors in their own scope.)
>> LT> logger.cpp:637: warning: destructor needed for `test2'
>> LT> logger.cpp:637: warning: where case label appears here
>> LT> logger.cpp:638: warning: destructor needed for `test2'
>> LT> logger.cpp:638: warning: where case label appears here
>> LT> logger.cpp:639: warning: destructor needed for `test2'
>> LT> logger.cpp:639: warning: where case label appears here
>> LT> make: *** [logger.o] Error 1
>> LT> ------------------------------------------------------
>> LT> line 609 =
>> LT> sql = "insert into call_data (direction, call_time, dest, trunk_no,
>> LT> 
>> file_name)values('"+details.inout+"','"+details.statime+"','"+details.cidn+"'"+details.channel+"','"+details.filename+"')";
>>
>>
>>
>>
>>
>>
>> LT> ----- Original Message ----- 
>> LT> From: "Jay Sprenkle" <[EMAIL PROTECTED]>
>> LT> To: <sqlite-users@sqlite.org>
>> LT> Sent: Saturday, September 09, 2006 11:16 PM
>> LT> Subject: Re: [sqlite] A lillte help adding sqlite to a c program
>>
>>
>>>> On 9/9/06, Lloyd Thomas <[EMAIL PROTECTED]> wrote:
>>>>> I know nothing of C++ and therefore need a lilte help editing a C++ app
>>>>> to
>>>>> insert some records into a database.
>>>>
>>>> here's an example to read from a database.
>>>> If you build the sql like you're doing and you use it on the web you
>>>> leave yourself
>>>> open to sql injection attacks. Using the bind() method eliminates that
>>>> vulnerability.
>>>> Something to consider.
>>>>
>>>> Jay
>>>>
>>>>
>>>> Here's some example code:
>>>>
>>>> sqlite3*        db;
>>>>
>>>> // connect to database
>>>> if ( sqlite3_open( "test.db", &db ) )
>>>>  throw "Can't open database";
>>>>
>>>> char* sql;
>>>>
>>>> sql = "SELECT one.test1, two.test2"
>>>>     " FROM one"
>>>>     " INNER JOIN two ON one.id = two.id"
>>>>     ;
>>>> sqlite3_stmt*   pStmt;
>>>>
>>>> if ( sqlite3_prepare( db, sql, strlen(sql), &pStmt, NULL ) != 
>>>> SQLITE_OK )
>>>>  {
>>>>     string str = "Cannot prepare sql: ";
>>>>     str += sql[t];
>>>>     str += ", Error: ";
>>>>     str += sqlite3_errmsg(db);
>>>>     throw str.c_str();
>>>>  }
>>>>
>>>> bool Loop = true;
>>>> while ( Loop )
>>>>  switch ( sqlite3_step( pStmt ) )
>>>>     {
>>>>        case SQLITE_ROW:
>>>>           // retrieve the results
>>>>           char* p = (char *) sqlite3_column_text( pStmt, 0 );
>>>>           string test1  = string( p ? p : "" );
>>>>
>>>>           p = (char *) sqlite3_column_text( pStmt, 1 );
>>>>           string test2 = string( p ? p : "" );
>>>>
>>>>           break;
>>>>        case SQLITE_DONE:
>>>>           Loop = false;
>>>>           break;
>>>>        case SQLITE_BUSY:
>>>>        case SQLITE_LOCKED:
>>>>        default:
>>>>           string str = "Cannot execute sql: ";
>>>>           str += sql[t];
>>>>           str += ", Error: ";
>>>>           str += sqlite3_errmsg(db);
>>>>           throw str.c_str();
>>>>           break;
>>>>     }
>>>>
>>>> // clean up when finished
>>>> sqlite3_finalize( pStmt );
>>>>
>>>> sqlite3_close( db );
>>>>
>>>>
>>>>
>>>> --
>>>> SqliteImporter and SqliteReplicator: Command line utilities for Sqlite
>>>> http://www.reddawn.net/~jsprenkl/Sqlite
>>>>
>>>> Cthulhu Bucks!
>>>> http://www.cthulhubucks.com
>>>>
>>>> -----------------------------------------------------------------------------
>>>> To unsubscribe, send email to [EMAIL PROTECTED]
>>>> -----------------------------------------------------------------------------
>>>>
>>
>>
>> LT>
>> -----------------------------------------------------------------------------
>> LT> To unsubscribe, send email to
>> [EMAIL PROTECTED]
>> LT>
>> -----------------------------------------------------------------------------
>>
>>
>>
>>
>> -- 
>> Best regards,
>> Teg                            mailto:[EMAIL PROTECTED]
>>
>>
>> -----------------------------------------------------------------------------
>> To unsubscribe, send email to [EMAIL PROTECTED]
>> -----------------------------------------------------------------------------
>> 


LT> 
-----------------------------------------------------------------------------
LT> To unsubscribe, send email to [EMAIL PROTECTED]
LT> 
-----------------------------------------------------------------------------




-- 
Best regards,
 Teg                            mailto:[EMAIL PROTECTED]


-----------------------------------------------------------------------------
To unsubscribe, send email to [EMAIL PROTECTED]
-----------------------------------------------------------------------------

Reply via email to