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
sqlite-users@sqlite.org
http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users

Reply via email to