Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Raise exception (https://www.clubdelphi.com/foros/showthread.php?t=77906)

jocaro 05-03-2012 17:40:16

Raise exception
 
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:

Cita:

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
Código Delphi [-]
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.
Código Delphi [-]
  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

Cita:

Empezado por duilioisola (Mensaje 426914)
¿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.



La franja horaria es GMT +2. Ahora son las 07:07:41.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi