bonjour,
je deviens fou... J'aimerais gérer mes RecordSet à l'intérieur de transaction.
J'ai donc préparé une classe DataContext pour travailler dans un Workspace donné :
J'utilise cette classe comme ceci :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48 Option Compare Database Option Explicit Private Enum RecordsetLevel Parent Child End Enum Private ws As DAO.Workspace Private db As DAO.Database Private Sub Class_Initialize() Set ws = DBEngine.CreateWorkspace("ws", "Admin", vbNullString) Set db = ws.OpenDatabase(CurrentDb.Name) ws.BeginTrans End Sub Public Function OpenChildRecordset(dataSourceName As String, foreignKey As Long) As Recordset Set OpenChildRecordset = OpenRecordset(dataSourceName, foreignKey, Child) End Function Public Function OpenParentRecordset(dataSourceName As String, primaryKey As Long) As Recordset Set OpenParentRecordset = OpenRecordset(dataSourceName, primaryKey, Parent) End Function Public Sub RollBack() ws.RollBack ws.BeginTrans End Sub Public Sub Commit() ws.CommitTrans ws.BeginTrans End Sub Private Function OpenRecordset(dataSourceName As String, key As Long, level As RecordsetLevel) As Recordset Dim qdf As DAO.QueryDef Set qdf = db.QueryDefs(dataSourceName) qdf.Parameters(IIf(level = Child, "FK", "PK")) = key Set OpenRecordset = qdf.OpenRecordset(dbOpenDynaset) End Function
Voici le code du form appelé :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11 'code d'un formulaire qui appel un autre formulaire : Private dc As New DataContext Private contactEditor As Form Private Sub OuvreForm Set contactEditor.Recordset = dc.OpenParentRecordset("RequêteSourceParamétrée", Me.Liste0) Set contactEditor.DataContext = dc contactEditor.Modal = True contactEditor.Visible = True End Sub
Voilà, je deviens fou parce que j'ai bien fait attention de créer une transaction quand j'initialise ma classe DataContext, ensuite je travaille toujours avec la même instance de DataContext, mon recordset est créé par DataContext, donc devrait être soumis à la transaction.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33 Private dc As DataContext Public Property Set DataContext(ByRef context As DataContext) Set dc = context End Property Private Sub Commande44_Click() ' 'Valide les modifications en cours. ' dc.Commit Me.Dirty = False btcAnnuler.SetFocus Commande44.Enabled = False End Sub Private Sub Commande9_Click() ' 'Valide les modifications en cours et ferme le form. 'Ici le code de fermeture du form suppose que le form soit l'objet actif ' dc.Commit DoCmd.Close End Sub Private Sub btcAnnuler_Click() ' 'Ici le code de fermeture du form suppose que le form soit l'objet actif ' DoCmd.Close End Sub
Or, que je commit ou non, les données sont toujours enregistrées...
Partager