Je suis exécutant une transaction d'extrémité # 1 que "ne peut pas commettre - aucune transaction n'est actif" p>
blockQuote>
Y a-t-il un moyen de déterminer si une transaction est active avant d'essayer un commit? J'ai suivi mon J'utilise l'API C P> code> sur ma base de données et occasionnellement, je reçois une erreur p>
"Début des transactions" code> à la main mais je pense qu'il y a une meilleure façon. P>
4 Réponses :
dans SQLite, transactions créées à l'aide de la transaction de début ... La transaction finale ne nid pas. P>
Pour les transactions imbriquées, vous devez utiliser les commandes de sauvegarde et de libération. P>
Vous répondez à quelque chose à propos de la nidification qui n'a rien à voir avec la question.
Oh, je suis désolé, j'ai mal compris. Je pensais que vous devez tenir compte de la comptabilité de la profondeur des transactions, ce que l'évimineux sortirait de Sync avec SQLite si cela ne l'a pas soutenait. Pour autant que je sache, il n'ya aucun moyen de demander à SQLite si c'est dans une transaction.
C'est bizarre. Je pensais que SQLite était toujours dans une transaction, soit explicitement créé par vous ou implicitement créé par SQLite: p>
http://www.sqlite.org/lang_transaction.html P>
Alors je suppose que l'erreur signifie que ce n'est pas dans une transaction que vous avez initiée ... Et si c'est ce que vous devez savoir, il semble que SQLite s'attend à ce que vous suiviez. Pas terriblement pratique, mais je suppose que c'est le coût d'une API simple. = / p>
Vous voudrez peut-être vérifier ceci: p>
http://www.sqlite.org/c3ref/get_autocommit.html << / p>
Selon la page, si vous êtes dans une transaction, sqlite3_get_autocommit () code> retournera 0. p>
L'interface que vous recherchez est réellement implémentée dans cette prochaine version de SQLite que vous pouvez voir dans les notes: https://sqlite.org/draft/c3ref/txn_state.html
Determine the transaction state of a database int sqlite3_txn_state(sqlite3*,const char *zSchema); The sqlite3_txn_state(D,S) interface returns the current transaction state of schema S in database connection D. If S is NULL, then the highest transaction state of any schema on databse connection D is returned. Transaction states are (in order of lowest to highest): SQLITE_TXN_NONE SQLITE_TXN_READ SQLITE_TXN_WRITE If the S argument to sqlite3_txn_state(D,S) is not the name of a valid schema, then -1 is returned.
L'explication de transaction de lecture / écriture est absente cependant. Si cette fonction renvoie «1» (Lire la transaction), cela signifie-t-il que je peux ou ne peut pas émettre une autre transaction Begn Transaction code> la mise à niveau vers une transaction d'écriture?