Hello,

I open one connection to a sqlitedb and do a few successful autocommited
sqlite3_exec() calls.
Then I want to use the db handle to call another sqlite3_exec() with SQL
  code for a transaction.
Before I close the connection I call again sqlite3_exec() with SQL
COMMIT to end the transaction.
This produces the sqlite error: cannot commit transaction - SQL
statements in progress

I don't use statements and/or threading in my code but sqlite is
compiled with threading enabled.

I don't understand why there are statements in progress?

In my code below I've used a while loop for the commit and this loops
endless, always reporting the SQL statements in progress error.

So what is going on there? What should I know?

Bye
Markus

Part my code with transaction:

strcpy(sql, "BEGIN EXCLUSIVE; INSERT INTO tbl_d (id) SELECT id FROM
tbl_o WHERE bs LIKE '32' AND bd < '1141078718' AND id NOT IN ( SELECT id
FROM tbl_d ); UPDATE tbl_o SET bs='64' WHERE bs LIKE '32' AND bd <
'1141078718'");

if ((dberr = sqlite3_exec(gdbh, sql, NULL, NULL, &errmsg)) != SQLITE_OK) {
    msg(MSG_ERROR, "(%d) %s", dberr, errmsg);
    if (errmsg != NULL) sqlite3_free(errmsg);
    strcpy(sql, "ROLLBACK");
    if ((dberr = sqlite3_exec(gdbh, sql, NULL, NULL, &errmsg)) !=
SQLITE_OK) {
        msg(MSG_ERROR, "(%d) %s", dberr, errmsg);
        if (errmsg != NULL) sqlite3_free(errmsg);
    }
    if (errmsg != NULL) sqlite3_free(errmsg);
    return;
}
if (errmsg != NULL) sqlite3_free(errmsg);

strcpy(sql, "COMMIT");

while ((dberr = sqlite3_exec(gdbh, sql, NULL, NULL, &errmsg)) !=
SQLITE_OK) {
    if (errmsg != NULL) sqlite3_free(errmsg);
}
if (errmsg != NULL) sqlite3_free(errmsg);

Reply via email to