FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Deshacer accion realizada por un ADOCOmmand
Hola a todos, uso C++Builder y me encuentro en la fase de depuración de un programita que estoy haciendo.
El caso es que se me ha ocurrido que puede darse el caso de que el usuario se equivoque a la hora de seleccionar una opcion y desee deshacer el ultimo cambio hecho. El caso es que depende de la opcion seleccionada el ADOCommand que utilizo realiza unas acciones u otras. De momento se me ha ocurrido sacar una ventana de notificación de los cambios para que el usuario acepte. Pero.... sabeis si existe la posibilidad de deshacer los ultimos cambios realizados por el ADOCommand? (Teniendo en cuenta que el componente sigue teniendo la propiedad CommandText intacta aún) Muchas gracias y un saludo! |
#2
|
||||
|
||||
Hola mizzard.
Mi conocimiento de los componentes ADO es muy pobre, pero... ¿ Has probado con el método RollbackTrans del TADOConnection ? Según la ayuda de Builder: Cita:
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#3
|
|||
|
|||
Hola, hasta donde tengo entendido eso es para poder realizar varios cambios con ADOCommand como si fuera uno único y si alguno de ellos da error, se cancelan todos. Para ello se sigue la siguiente estructura:
Código:
frmPrincipal->DBConnectionTiMesDB->BeginTrans(); try{ strSQL = "UPDATE Digitalizado SET FechaOut = " + fecha + ", HoraOut= " + hora + " WHERE Id= " + frmPrincipal->DBtxtContador->Caption; frmPrincipal->cmdTiMes->CommandText = strSQL; frmPrincipal->cmdTiMes->Execute(); // Restamos las fechas para calcular el tiempo de proceso resultadoProceso = restarFechas(); // Metemos el resultado en la base de datos strSQL = "UPDATE Digitalizado SET TiempoTotal = " + resultadoProceso + " WHERE Id= " + frmPrincipal->DBtxtContador->Caption; frmPrincipal->cmdTiMes->CommandText = strSQL; frmPrincipal->cmdTiMes->Execute(); frmPrincipal->DBConnectionTiMesDB->CommitTrans(); } catch(...){ frmPrincipal->DBConnectionTiMesDB->RollbackTrans(); } Otra duda que me surge es como probar si el rollbackTrans que he implementado funciona o no. He probado a provocar un error en el segundo command (cambiando un TiempoTotal por TiemoTotal) y me salta un error en access pero no salta el catch ni se activa el rollback. Ideas?? Muchas gracias y un abrazo! |
#4
|
|||
|
|||
Cita:
Lo que no consigo es deshacer el último cambio por boton de deshacer... |
#5
|
||||
|
||||
Cita:
No entiendo bién eso último, ¿ es decir que no te funciona si haces ? Código:
void __fastcall TForm1::btnDeshacerClick(TObject *Sender) { frmPrincipal->DBConnectionTiMesDB->RollbackTrans(); }
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#6
|
|||
|
|||
Cita:
Hola, el caso es q haciendo pruebas intenté eso mismo y no funcionaba y debugeando código llegue a la siguiente conclusion: Basandonos en el trozo q he puesto con try y catch si se produce algun error (no llega a ejecutarse el CommitTrans) por lo que el RollbackTrans sí que funciona. Si todo se efectua correctamente (se ejecuta todo el codigo del try incluyendo el commitTrans -> que es cuando se llevan a cabo todas las modificaciones en la base de datos) si luego intentas ejecutar el RollbackTrans, el compilador da error de que no existe ninguna transaccion abierta (Ya que se ha validado todo con el CommitTrans). Mmm, no se si me he explicado del todo bien, pero básicamente en el momento que se ejecuta el CommitTrans y se actualiza todo no consigo ver la forma de deshacer los cambios. Un saludo! |
#7
|
||||
|
||||
Hola.
Si ahora entendí. Y es totalmente lógico, ya que CommitTrans almacena todos los cambios y finaliza la transacción actual. Creo que para lograr el efecto que buscas deberías comenzar la transacción, permitir todos los cambios que desee el usuario y dejarle la opción de cancelar (RollBackTrans) o aceptar (CommitTrans) por el medio que consideres adecuado; botones, cuadro de diálogo, etc. Un saludo.
__________________
Daniel Didriksen Guía de estilo - Uso de las etiquetas - La otra guía de estilo .... |
#8
|
|||
|
|||
, lo mismo que habia pensado.
Muchas gracias, un abrazo! |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ultima accion realizada en una BD access | principiante22 | Conexión con bases de datos | 3 | 24-10-2008 15:55:31 |
ADOCommand con parámetros que no los toma | saldanaluis | Tablas planas | 11 | 12-09-2007 17:05:33 |
ADOCommand | carols018 | SQL | 1 | 06-12-2006 19:59:25 |
AdoCommand Asincrono... | Xianto | Conexión con bases de datos | 2 | 31-05-2005 19:28:58 |
Parametros del ADOCommand | murrai | Conexión con bases de datos | 4 | 13-03-2005 18:26:34 |
|