2009-11-12 10 views
7

estoy corriendo un END TRANSACTION en mi base de datos y de vez en cuando me sale errorDeterminar si la transacción SQLite3 está activo

# 1 que "no puede comprometerse - no hay ninguna transacción activa"

¿Hay alguna manera para determinar si una transacción está activa antes de intentar una confirmación? He estado siguiendo mi "BEGIN TRANSACTIONS" a mano, pero creo que hay una manera mejor.

estoy usando la API C

Respuesta

0

En SQLite, las transacciones creadas utilizando BEGIN TRANSACTION ... FIN transacción no hacer nido.

Para transacciones anidadas, necesita usar los comandos SAVEPOINT y RELEASE.

Ver http://www.sqlite.org/lang_transaction.html

y http://www.sqlite.org/lang_savepoint.html

+0

Usted está contestando algo acerca de anidación que tiene nada que ver con la pregunta. –

+1

Oh, lo siento, lo malentendí. Pensé que debías haber estado contando cuán profundamente anidadas estaban las transacciones, lo que obviamente no se sincronizaría con SQLite si no lo soportaba. Por lo que sé, no hay forma de preguntar a SQLite si se trata de una transacción. –

0

eso es raro. Pensé sqlite estaba siempre en una transacción, ya sea explícitamente creado por usted o implícitamente creada por sqlite:

http://www.sqlite.org/lang_transaction.html

Así que supongo que significa el error de que no es en una transacción que usted haya iniciado ... y si eso es lo que necesita saber, parece correcto que sqlite espere que se mantenga al tanto. No es terriblemente conveniente, por supuesto, pero creo que ese es el costo de una API simple. =/

Cuestiones relacionadas