Capture et restitution dynamique des enregistrements d'une table
Voici deux procédures intéressantes ; elles vous permettent de copier tous les enresgistrements d'une table donnée dans une variable et ce quelque soit le nombre de colonnes.
Contexte: Vous avez besoin de stocker tous les enregistrements pour une condition donnée d'une table où l'on considère que la clé primaire est formée d'un seul champ (A vous de peaufiner pour des cas de clés multiples).
Objectif: Capturer l'ensemble de ces enregistrement dans un tableau et être en mesure de restituer tous ces enregistrement au cas où l'utilisateur cliquerait sur Annuler après avoir effectué des modifications sur certains enregistrements.
On considère que la clé primaire un champ invisible dans votre formulaire.
Mode opératoire: Deux procédures sont donc mises en place, l'une pour capturer et l'autre pour restituer...
Ces procédures sont totalement dynamiques et génériques:
Pour capturer tous les enregistrements :
Exemple d'utilisation :
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 Private m_strLastTableData() As String Private Sub GetRecordData(ByVal TableName As String, ByVal Cols As Integer) Dim oRS As DAO.Recordset Dim intNBRecords As Integer Dim R As Integer Dim C As Integer m_intColumns = Cols Set oRS = CurrentDb.OpenRecordset(TableName, 2) With oRS .MoveLast intNBRecords = .RecordCount ReDim m_strLastTableData(1 To intNBRecords, 0 To Cols) .MoveFirst Do While Not .EOF R = R + 1 For C = 0 To Cols m_strLastTableData(R, C) = .Fields(C) Next .MoveNext Loop .Close End With Set oRS = Nothing End Sub
'Ici, on prend tous les enregistrements d'une table nommée MaTable et qui comporte
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Call GetRecordData ("MaTable", 4)
5 champs distincts (0 à 4)
Pour restituer tous ces enregistrements :
Exemple d'utilisation :
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 Private Sub RestoreRecordData(ByVal TableName As String, _ ByVal Cols As Integer) Dim oDB As DAO.Database Dim oRS As DAO.Recordset Dim R As Integer Dim C As Integer Dim SQLUpdate As String Dim vntValue As Variant Set oDB = CurrentDb Set oRS = oDB.OpenRecordset(TableName, 2) With oRS Do While Not .EOF R = R + 1 For C = 1 To Cols vntValue = m_strLastTableData(R, C) SQLUpdate = "UPDATE " & TableName & " SET " & .Fields(C).Name & _ " = " & Chr(34) & vntValue & Chr(34) & " WHERE " & .Fields(0).Name & _ " = " & .Fields(0).Value oDB.Execute SQLUpdate, dbSeeChanges Next .MoveNext Loop .Close End With oDB.Close Set oRS = Nothing Set oDB = Nothing End Sub
'Ici, on restitue tous les enregistrements de la table nommée MaTable et qui comporte 5 champs distincts
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Call RestoreRecordData ("MaTable", 4)
(0 à 4) où la condition WHERE s'établit avec la valeur de la clé primaire pour chacun des enregistrements...
Argy
Partager