PDA

Ver la Versión Completa : Raise exception


jocaro
05-03-2012, 17:40:16
Hola a todos.

Depurando el código de una procedure, encuentro un error (ambos presentados mas adelante), que he intentado acotar para evitarlo, pero no lo consigo.

Al ejecutar los métodos post de las líneas de código mostradas en negrita me salta el siguiente error:

raise exception class ESQLiteError, message 'cannot rollback savepoint - SQL statements in progress'En otras partes del código de la aplicación hay definidas unas querys de tipo SELECT y referidas sólo a TablaNotTem. Aunque en la sesión en curso de la aplicación no se utilicen esas querys, el error sigue apareciendo.

Si alguno de vosotros sabe indicarme a que puede ser debido el error, alguna situación típica en que suele aparecer, en definitiva cualquier comentario que pueda encaminarme a la solución, os lo agradeceré

Un saludo
procedure TSDIAppForm.GrabarBD();
begin

{ Recoger modificación último registro de tablas editado, por si no se cambia a otro registro antes de grabar (no se recogerían cambios automáticamente) }
FrmBasDat.TablaElementosArbol.Edit;
FrmBasDat.TablaElementosArbol.Post;
FrmBasDat.TablaNotas.Edit;
FrmBasDat.TablaNotas.Post;
FrmBasDat.TablaTemas.Edit;
FrmBasDat.TablaTemas.Post;
FrmBasDat.TablaNotTem.Edit;
FrmBasDat.TablaNotTem.Post;

{ Grabación en base de datos de los datos de la transacción pendiente }
FrmBasDat.ConexionBdSqlite.Commit;

end;

duilioisola
05-03-2012, 22:47:02
¿Es un entorno multiusuario?
Puede ser que otra sesión de la aplicación esté tratando de hacer cambios y colisione con tu transacción.

¿Tienes eventos BeforePost/AfterPost BeforeEdit/AfterEdit?
Puede ser que estos eventos abran/cierren/modifiquen cosas que hagan que salte esta exception.

Se me ocurre también que el motor de base de datos trabaje en un hilo separado y esté ocupado realizando el primer Edit/Post, cuando tu ya estás llamando al segundo.
Prueba a poner una pausa entre ellos.

FrmBasDat.TablaElementosArbol.Edit;
FrmBasDat.TablaElementosArbol.Post;
Sleep(10);
FrmBasDat.TablaNotas.Edit;
FrmBasDat.TablaNotas.Post;
Sleep(10);
FrmBasDat.TablaTemas.Edit;
FrmBasDat.TablaTemas.Post;
Sleep(10);
FrmBasDat.TablaNotTem.Edit;
FrmBasDat.TablaNotTem.Post;
Sleep(10);

jocaro
06-03-2012, 11:08:38
¿Es un entorno multiusuario?
Puede ser que otra sesión de la aplicación esté tratando de hacer cambios y colisione con tu transacción.

¿Tienes eventos BeforePost/AfterPost BeforeEdit/AfterEdit?
Puede ser que estos eventos abran/cierren/modifiquen cosas que hagan que salte esta exception.

Se me ocurre también que el motor de base de datos trabaje en un hilo separado y esté ocupado realizando el primer Edit/Post, cuando tu ya estás llamando al segundo.
Prueba a poner una pausa entre ellos.



Hola, ante todo gracias por tus indicaciones.

La aplicación es monousuario, he probado pausas hasta de un segundo pero sigue saltando la excepción, he cambiado la línea cuyo post falla para ejecutarla la primera y sigue fallando.

Un detalle que no había comentado es que la ventana de excepción sólo salta en modo depuración, aunque intente ejecutar la línea con F7 dispara la excepción instantáneamente.

http://www.clubdelphi.com/foros/C:%5CDocuments%20and%20Settings%5Cjcampos%5CEscritorio%5CEasyCapture1.jpg