The application runs as a singleton; there are no other applications accessing the data base.
I do not run the command-line tool while testing. I've cut down the example code: SqlStatus = sqlite3_open16 ( db_loc_string , &SqlDB ) ; if ( SQLITE_OK != SqlStatus ) { . . . return DATASTORE_UNAVAILABLE ; } SqlStatus = sqlite3_prepare16_v2 ( SqlDB , L"BEGIN TRANSACTION" , 36 , &SqlStmt , NULL ) ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_PREP_ERROR ; } SqlStatus = sqlite3_step ( SqlStmt ) ; if ( SQLITE_DONE != SqlStatus ) { . . . return TXN_BEGIN_FAILED ; } SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_FNLZ_ERROR ; } swprintf_s ( (PXID_CHAR)sql_statement , sizeof ( sql_statement ) / sizeof ( XID_CHAR ) , L"DELETE" L" FROM RSPNS" L" WHERE . . . ) ; SqlStatus = sqlite3_prepare16_v2 ( SqlDB , sql_statement , ( lstrlen ( sql_statement ) + 1 ) * sizeof ( XID_CHAR ) , &SqlStmt , NULL ) ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_PREP_ERROR ; } SqlStatus = sqlite3_step ( SqlStmt ) ; if ( SQLITE_DONE != SqlStatus ) { . . . return SQL_DLET_ERROR ; } SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_FNLZ_ERROR ; } SqlStatus = sqlite3_prepare16_v2 ( SqlDB , L"COMMIT TRANSACTION" , 38 , &SqlStmt , NULL ) ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_PREP_ERROR ; } SqlStatus = sqlite3_step ( SqlStmt ) ; if ( SQLITE_DONE != SqlStatus ) { . . . return TXN_COMMIT_FAILED ; } SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_FNLZ_ERROR ; } SqlStatus = sqlite3_prepare16_v2 ( SqlDB , L"BEGIN TRANSACTION" , 36 , &SqlStmt , NULL ) ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_PREP_ERROR ; } /*-------------------------*/ SqlStatus = sqlite3_step ( SqlStmt ) ; if ( SQLITE_DONE != SqlStatus ) { . . . return TXN_BEGIN_FAILED ; } SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ; if ( SQLITE_OK != SqlStatus ) { . . . return SQL_FNLZ_ERROR ; } . . . swprintf_s ( (PXID_CHAR)sql_statement , sizeof ( sql_statement ) / sizeof ( XID_CHAR ) , L"INSERT" L" INTO RSPNS" L" ( SERVER_NAME" . . . L" , RESPONSE_TEXT" L" )" L" VALUES ( '%s'" . , , L" , '%s'" L" )" , ServerName . . . , &InputBuffer[m] ) ; SqlStatus = sqlite3_prepare16_v2 ( SqlDB , (const char *)sql_statement , ( lstrlen ( sql_statement ) + 1 ) * sizeof ( XID_CHAR ) , &SqlStmt , NULL ) ; if ( SQLITE_OK != SqlStatus ) { SQLiteError ( sql_statement , L"sqlite3_prepare16_v2 ( )" ) ; sqlite3_close ( SqlDB ) ; SqlDB = NULL ; return SQL_PREP_ERROR ; } SqlStatus = sqlite3_step ( SqlStmt ) ; if ( SQLITE_DONE != SqlStatus ) { . . . return SQL_ISRT_ERROR ; } SqlStatus = sqlite3_finalize ( SqlStmt ) ; if ( SQLITE_OK != SqlStatus ) { . . . return XID_DBPA_SQL_FNLZ_ERROR ; } . . . SqlStatus = sqlite3_prepare16_v2 ( SqlDB , L"COMMIT TRANSACTION" , 38 , &SqlStmt , NULL ) ; if ( SQLITE_OK != SqlStatus ) { . . . return XID_DBPA_SQL_PREP_ERROR ; } SqlStatus = sqlite3_step ( SqlStmt ) ; if ( SQLITE_DONE != SqlStatus ) { . . . return XID_DBPA_TXN_COMMIT_FAILED ; } SqlStatus = sqlite3_finalize ( SqlStmt ) ; SqlStmt = NULL ; if ( SQLITE_OK != SqlStatus ) { . . . return XID_DBPA_SQL_FNLZ_ERROR ; } sqlite3_close ( SqlDB ) ; SqlDB = NULL ; The SQLITE_BUSY condition is raised on approximately the 300th execution of the second COMMIT TRANSACTION. _______________________________________________ sqlite-users mailing list sqlite-users@sqlite.org http://sqlite.org:8080/cgi-bin/mailman/listinfo/sqlite-users