Access - usar una transacción

 
Vista:

usar una transacción

Publicado por CyRuS (127 intervenciones) el 29/05/2007 17:01:17
Tengo hecho con DAO un pequeño código con una transacción. Imaginemos:

BeginTrans

sql = "DELETE Tabla 1.* FROM Tabla1"
db.Execute sql

sql = "DELETE Tabla2.* FROM Tabla2"
db.Execute sql

'tran = MsgBox("¿Desea realizar los cambios?", vbYesNo + vbQuestion,
"Confirmar Acción")
'If tran = vbNo Then
' Rollback
' MsgBox ("Ha cancelado todas las operaciones y todos los datos han
vuelto a su origen")
'Else
' CommitTrans
'End If

Y funciona. Pero el problema lo tengo cuando en vez de DAO quiero usar las
funciones del Access. Imaginemos:

BeginTrans

DoCmd.RunSQL "DELETE Auxiliar.* FROM Auxiliar"

¿desea realizar los cambio? -> Rollback, CommitTrans etc. (como antes)

En este caso ya no me deja usar este tipo de transacción. Y mi pregunta es,
¿cómo se tiene que hacer pues? porque el access si que tiene una propiedad
llamada Transactions.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
Imágen de perfil de Alejandro

Uso de transacciones con las funciones DoCmd.RunSQL

Publicado por Alejandro (4142 intervenciones) el 10/08/2023 23:23:16
En Access, las transacciones manejadas por `DoCmd.RunSQL` se comportan de manera diferente a las transacciones manejadas por DAO. `DoCmd.RunSQL` ejecuta una única instrucción SQL y no permite una gestión directa de transacciones como lo hace DAO. Sin embargo, puedes lograr efectos similares mediante el uso de puntos de control.

Aquí tienes una idea de cómo podrías manejar transacciones similares utilizando `DoCmd.RunSQL` y puntos de control:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
On Error GoTo ErrHandler
 
' Inicia una transacción implícita
DoCmd.SetWarnings False
 
' Ejecuta las instrucciones SQL
DoCmd.RunSQL "DELETE Auxiliar.* FROM Auxiliar"
 
' Pide confirmación al usuario
If MsgBox("¿Desea realizar los cambios?", vbYesNo + vbQuestion, "Confirmar Acción") = vbNo Then
    ' Si el usuario elige no, se deshace la transacción
    DoCmd.RunCommand acCmdUndo
    MsgBox "Ha cancelado todas las operaciones y todos los datos han vuelto a su origen"
Else
    ' Si el usuario elige sí, se confirma la transacción
    DoCmd.SetWarnings True
End If
 
Exit Sub
 
ErrHandler:
    ' Si ocurre un error, deshace la transacción y muestra un mensaje
    DoCmd.RunCommand acCmdUndo
    MsgBox "Se ha producido un error. Se han deshecho los cambios.", vbExclamation, "Error"

Este código utiliza el método `DoCmd.SetWarnings` para desactivar y activar los mensajes de confirmación de Access. Además, se utiliza `DoCmd.RunCommand acCmdUndo` para deshacer la última operación realizada.

Toma en cuenta que las transacciones implícitas pueden tener ciertas limitaciones y dependen del comportamiento de Access en cuanto a puntos de control y deshacer operaciones. Si necesitas un control más granular y preciso sobre las transacciones, podría ser más recomendable utilizar DAO con transacciones explícitas.

Recuerda que manejar transacciones y confirmaciones de usuario de manera adecuada es fundamental para mantener la integridad de los datos y garantizar que los cambios se realicen de manera segura.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar