A Dilluns, 5 de maig de 2014 02:59:59, lyx va escriure:
> I have tried to use SQL_TRANSIENT instead of SQLITE_STATIC in
> sqlite3_bind_text. But the result is still not correct. The column num is
> correct now but the row number embedded in column data in every row is all
> assigned to zero now. It should be increased row by row by my program. Can
> anyone throw some light on this issue? Thanks.
>
>
>
> sqlite> select * from ins_test;
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> col1000000000|col2000000000|col3000000000|col4000000000|col5000000000|col60
> 00000000
>
> sqlite>
>
>
>
>
>
>
> Code:
> sprintf (sql_str, "insert into ins_test values (?,?,?,?,?,?)");
>
>
>
> if (SQLITE_OK != (rc = sqlite3_prepare_v2(db, sql_str, -1, &stmt,
> NULL)))
>
> {
>
> printf ("sqlite3_prepare_v2 error code is [%d]", rc);
>
> sqlite3_close(db);
>
> return -1;
>
> }
>
>
>
> for (i = 0; i < 10; i++)
>
> {
>
> memset (tmp_str, 0, sizeof(tmp_str));
>
> sprintf (tmp_str, "col1%09d", i);
>
> sqlite3_bind_text (stmt, 1, tmp_str, -1, SQL_TRANSIENT);
>
>
>
> memset (tmp_str, 0, sizeof(tmp_str));
>
> sprintf (tmp_str, "col2%09d", i);
>
> sqlite3_bind_text (stmt, 2, tmp_str, -1, SQL_TRANSIENT);
>
>
>
> memset (tmp_str, 0, sizeof(tmp_str));
>
> sprintf (tmp_str, "col3%09d", i);
>
> sqlite3_bind_text (stmt, 3, tmp_str, -1, SQL_TRANSIENT);
>
>
>
> memset (tmp_str, 0, sizeof(tmp_str));
>
> sprintf (tmp_str, "col4%09d", i);
>
> sqlite3_bind_text (stmt, 4, tmp_str, -1, SQL_TRANSIENT);
>
>
>
> memset (tmp_str, 0, sizeof(tmp_str));
>
> sprintf (tmp_str, "col5%09d", i);
>
> sqlite3_bind_text (stmt, 5, tmp_str, -1, SQL_TRANSIENT);
>
>
>
> memset (tmp_str, 0, sizeof(tmp_str));
>
> sprintf (tmp_str, "col6%09d", i);
>
> sqlite3_bind_text (stmt, 6, tmp_str, -1, SQL_TRANSIENT);
>
>
>
> if (SQLITE_DONE != (rc = sqlite3_step(stmt)))
>
> {
>
> printf ("sqlite3_step error code is [%d]\n", rc);
>
> sqlite3_finalize(stmt);
>
> sqlite3_close(db);
>
> return -1;
>
> }
>
> }
>
You need to reset the statement
(sqlite3_reset(stmt))
after sqlite3_step(stmt) and before sqlite3_bind_text(...)
And by other hand
if ( SQLITE_DONE != ( rc = sqlite3_step(stmt) ) )
must be
if ( SQLITE_DONE != sqlite3_step(stmt) )
and
if (SQLITE_OK != (rc = sqlite3_prepare_v2(db, sql_str, -1, &stmt, NULL)))
must be
if ( SQLITE_OK != sqlite3_prepare_v2(db, sql_str, -1, &stmt, NULL ) )
josep.
_______________________________________________
sqlite-users mailing list
[email protected]
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users