Utiliser des transactions dans un jeu d’enregistrements DAO

Une transaction est un ensemble d’opérations regroupées et gérées en tant qu’unité de travail unique. Le travail d'une transaction doit être achevé pour tous les éléments ; si l'un d'entre eux échoue, toute la transaction échoue également. Les transactions permettent au développeur de faire respecter l'intégrité des données. En regroupant plusieurs opérations de base de données en une seule unité dont le succès ou l'échec doit être global, on s'assure que la base de données ne se retrouve pas dans un état incohérent. Les transactions sont couramment utilisées dans la plupart des SGBD.

L'exemple de traitement de transaction le plus courant est celui du distributeur de billets automatique. La distribution de billets puis le débit enregistré sur le compte de l'utilisateur sont considérés comme une unité logique de travail et sont regroupés dans une transaction : les billets ne sont fournis que si le système est également capable de débiter le compte. En utilisant une transaction, l'opération complète réussit ou échoue. Il est ainsi possible de maintenir un état cohérent pour la base de données du distributeur de billets.

L'utilisation de transactions est à envisager si vous souhaitez vous assurer que chaque opération du groupe d'opérations est réussie avant que toutes les opérations soient validées. Gardez à l'esprit que les transactions sont invisibles pour les autres transactions. Autrement dit, aucune transaction ne peut voir la mise à jour d'une autre transaction dans la base de données tant qu'elle n'est pas validée.

Notes

Le comportement des transactions avec les bases de données Access diffère du comportement des sources de données ODBC, telles que SQL Server. Par exemple, si une base de données est connectée à un serveur de fichiers et celui-ci s'arrête avant la validation des modifications de la transaction, votre base de données peut se retrouver dans un état incohérent. Si vous avez besoin d’une véritable prise en charge des transactions par rapport à la du dualité, vous devez examiner l’utilisation d’une architecture client/serveur.

Le moteur de base de données Access prend en charge les transactions via les méthodes DAO BeginTrans, CommitTrans et Rollback de l’objet Workspace.

L’exemple de code suivant modifie la fonction de tous les commerciaux dans la table Employees. Après que la méthode BeginTrans démarre une transaction qui isole toutes les modifications effectuées dans la table Employés, le méthode CommitTrans enregistre les modifications. N’ignorez pas que vous pouvez utiliser la méthode Rollback pour annuler les modifications que vous avez enregistrées avec la méthode Update.

Sub ChangeTitle() 
 
Dim wrkCurrent As DAO.Workspace 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployee As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set wrkCurrent = DBEngine.Workspaces(0) 
   Set dbsNorthwind = CurrentDB 
   Set rstEmployee = dbsNorthwind.OpenRecordset("Employees") 
 
   wrkCurrent.BeginTrans 
   Do Until rstEmployee.EOF 
      If rstEmployee!Title = "Sales Representative" Then 
         rstEmployee.Edit 
         rstEmployee!Title = "Sales Associate" 
         rstEmployee.Update 
      End If 
      rstEmployee.MoveNext 
   Loop 
 
   If MsgBox("Save all changes?", vbQuestion + vbYesNo) = vbYes Then 
      wrkCurrent.CommitTrans 
   Else 
      wrkCurrent.Rollback 
   End If 
 
   rstEmployee.Close 
   dbsNorthwind.Close 
   wrkCurrent.Close 
 
   Set rstEmployee = nothing 
   Set dbsNorthwind = Nothing 
   Set wrkCurrent = Nothing 
 
   Exit Sub 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Sub

Lorsque vous utilisez des transactions, toutes les bases de données et les objets Recordset de l’objet Workspace spécifié sont affectés ; sont globales pour l’espace de travail, et non pour une base de données ou un recordset spécifique. Si vous effectuez des opérations sur plusieurs bases de données ou dans une transaction d’espace de travail, les méthodes Commit et Rollback affectent tous les objets modifiés au sein de cet espace de travail pendant la transaction.

Vous pouvez également utiliser les méthodes BeginTrans, CommitTrans et Rollback avec l’objet DBEngine. Dans ce cas, la transaction est appliquée à l’espace de travail par défaut, qui est DBEngine.Workspaces(0) .

Assistance et commentaires

Avez-vous des questions ou des commentaires sur Office VBA ou sur cette documentation ? Consultez la rubrique concernant l’assistance pour Office VBA et l’envoi de commentaires afin d’obtenir des instructions pour recevoir une assistance et envoyer vos commentaires.