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