2011-05-10 10 views
7

Necesito ejecutar varias cláusulas sql, inserciones, actualizaciones y eliminar, por ejemplo. ¿Cómo usar una transacción en Access para vincularlos?Transacción en Access

Se prefiere DAO.

como:

BeginTrans 
Excute SQL_1 
Excute SQL_2 
..... 
CommitTrans 

Gracias!

Respuesta

4

Si utiliza DAO, puede utilizar los BeginTrans y CommitTrans métodos de la DBEngine objeto global:

Dim db As Database 
Set db = CurrentDb 

DBEngine.BeginTrans 
db.Execute SQL_1 
db.Execute SQL_2 
... 
DBEngine.CommitTrans 
+1

Si hay algo mal en la transacción, ¿dónde debería poner el ROLLBACK? En el controlador de errores? – darkjh

+1

@darkjh: Exacto. – Heinzi

23

Aquí está un esqueleto más completo ...

Dim ws As DAO.Workspace 
Dim in_trans As Boolean 

Sub Transaction() 
On Error GoTo Trans_Error 
    Set ws = DBEngine.Workspaces(0) 
    in_trans=True 
    ws.BeginTrans 

    <do some SQL stuff; maybe use Err.Raise> 

    ws.CommitTrans 
    in_trans=False 
Trans_Exit: 
    Set ws = Nothing 
    Exit Sub 
Trans_Error: 
    If in_trans = True Then 
     ws.Rollback 
    EndIf 
    Resume Trans_Exit 
End Sub 
+0

+1. Esto en realidad es mucho mejor que el ejemplo que MS da en su documentación. – Heinzi

+0

¡Gracias! Cuando tomé la respuesta, no vi la tuya ... – darkjh

+7

Reemplazaría 'Reanudar Trans_Salida' con' 'Haz el resto de tu gestión de errores aquí', ya que registraste el error, mostraste un mensaje, volviste a lanzar el error o volviste algunos códigos de error suelen ser más apropiados que simplemente "silenciosamente" retrocediendo. Además, como 'ws' y' in_trans' solo son necesarios dentro del Sub, también pondría sus declaraciones dentro del Sub. – Heinzi