Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   SQL (https://www.clubdelphi.com/foros/forumdisplay.php?f=6)
-   -   Deshacer Post sin transacciones (https://www.clubdelphi.com/foros/showthread.php?t=36013)

miquellg 28-09-2006 23:11:58

Deshacer Post sin transacciones
 
hola compañeros,
estoy realizando unas modificaciones e inserciones en tablas a través de AdoQuery pero en un momento dado, por ejemplo en caso de error, necesito deshacer los cambios aplicados a las tablas. He intentado hacer servir transacciones pero me muestra el siguiente mensaje de error en el momento de realizar el BeginTrans: 'el proveedor actual no admite transacciones'.
Sabeis a que se refiere o cómo evitar el error?
Hay algún método alternativo a las transacciones para deshacer cambios en tablas?
Gracias por la colaboración

Caral 28-09-2006 23:17:58

Hola miquellg
Si ya hiciste el post y quieres eliminar el ultimo registro, lo mas facil es
Abrir la tabla enviarla al ultimo registro y eliminarlo.

Código Delphi [-]
ADOQuery1.open;
ADOQuery1.Last;
ADOQuery1.Delete;
ADOQuery1.Post;



Esto lo puedes hacer en un boton o donde quieras
Saludos

Héctor Randolph 28-09-2006 23:46:02

Pues existen varias posibilidades, una de ellas es utilizar tablas temporales (tablas en memoria) y otra es usar actualizaciones en cache (CacheUpdates).

Te dejo un enlace en donde se comenta como hacer aplicaciones con actualizaciones en cache utilizando los componentes ClientDataSet.


ClientDataSet y DataSetProvider en aplicaciones cliente/servidor


Saludos

miquellg 28-09-2006 23:48:33

Gracias Caral,
pero necesito borrar más de un registro. Por ejemplo, tantas lineas de detalle de factura como haya insertado.
Además quisiera deshacer los cambios y no borrar, para que los contadores de documentos no se viesen modificados.

Caral 28-09-2006 23:56:19

Hola
La opcion que propone Hector Randolph me parece interesante, sobre todo la parte de crear una tabla temporal, ya que en cuanto se este seguro de que los datos introducidos son los correctos, estos se pasan a la tabla principal y ya, asi no tienes que hacer modificacion alguna, incluso la transferencia de datos se puede hacer al final del dia.
Otra forma de borrar los datos si la primera no te gusta es por medio de un campo fecha, numero o algun dato y asi borraras todo el registro correspondiente a dicho campo.
Que motor de base de datos usas ?
Saludos

miquellg 29-09-2006 00:05:00

Trabajo con un AdoConection y supongo que haré un DELETE a través de una sentencia SQL de todos los registros insertados en las tablas.

Caral 29-09-2006 00:23:37

Hola
Intenta algo como esto:

Código Delphi [-]
ADOQuery1.ExecSQL;
ADOQuery1.SQL.Add('Delete * from TUTABLA where Factura = '+DBEdit1.text+'';
ADOQuery1.open;
ADOQuery1.Post;




Con esto borraras los registros creados de una factura determinada
Saludos


La franja horaria es GMT +2. Ahora son las 08:56:10.

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