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)
-   -   Borrado de líneas en un IBDataSet (https://www.clubdelphi.com/foros/showthread.php?t=49080)

birmain 12-10-2007 02:47:06

Borrado de líneas en un IBDataSet
 
Un saludo a todos los participantes.
Aunque ya soy veterano, no participo en estos foros desde la primera fase en que estos se iniciaron, por lo tanto, me alegro reencontrarme con gente que comparte las mismas inquietudes.

Al asunto: Estoy empezando una aplicación con Firebird 1.5, IBX y delphi 7.
El problema es el siguiente: En los eventos AfterInsert, AfterPost y AfterDelete del IBDataSet, ejecuto el Commit de la transaccion asociada a este. La cosa funciona como se espera, excepto que si después de insertar una linea, esta es borrada. Entonces a pesar de que hay un Commit en el evento AfterDelete, la linea permanece inalterada. Si se borra una linea existente, en vez de una recién creada, funciona perfectamente.

He probado poner un CommitRetaining en el evento AfterDelete, y funciona, pero al cerrarse el DataSet hay que volverlo a abrir, y situar el puntero en el registro que estaba, con lo que no creo que esto sea solución.

¿Alguien sabe a que puede ser debido esto?. Muchas gracias a todos por anticipado.

Caral 12-10-2007 03:12:09

Hola
No manejo Firebird pero el concepto seria asi.
Código Delphi [-]
DataModule1.AC1.BeginTrans;
// lo que sea
DataModule1.AC1.CommitTrans;
// si se logro
 except
         on E:Exception do DataModule1.AC1.RollbackTrans;
// si no se logro, no pasa nada
Para mi no tiene logica que no se pueda eliminar un registro aunque este recién creado, puede estar pasando algo con el post del mismo, no se.
Saludos

birmain 12-10-2007 03:49:47

Gracias, Caral, por tu respuesta.

La estructura que sugieres, la implemento en el caso de que una transacción afecte a más de una tabla. Por ejemplo en una facturación, donde se ven implicadas varias. Se trata de aplicar todos los cambios al mismo tiempo, o deshacerlos para mantener la coherencia.

Aquí se trata de una tabla sencilla. Por lo tanto, mando al servidor los cambios una vez producidos.


Un saludo.

Caral 12-10-2007 04:16:48

Hola
Por cierto Bienvenido al club.
Cita:

Empezado por birmain (Mensaje 238043)
excepto que si después de insertar una linea, esta es borrada. Entonces a pesar de que hay un Commit en el evento AfterDelete, la linea permanece inalterada. Si se borra una linea existente, en vez de una recién creada, funciona perfectamente.

Me sigue pareciendo raro, seguro tanto como a ti.
Si una linea existente se borra y una recien creada no, la lógica dice que el problema no esta en el delete, esta en el insert o post, dependiendo de cual uses, osea que no se estan insertando con la suficiente rapidez los datos, por alguna razon que desconozco.
Bueno, es solo la opinion de un novato.
Saludos


La franja horaria es GMT +2. Ahora son las 21:55:26.

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