Comment créer un recordset "déconnecté" ?
Il est parfois intéressant d'utiliser un recordset déconnecté,
c'est-à-dire un jeu d'enregistrements qui n'est lié à aucune base de données
et que l'on remplit manuellement. Cela peut s'avérer très utile lorsqu'un
contrôle nécessite une liaison à une source de données, mais que l'on ne
désire pas employer de bases de données.
Voici un exemple de code qui crée un recordset déconnecté. Notez que lors
de son ouverture, le curseur est automatiquement défini côté client et de
type statique :
Option Explicit
Private Sub Form_Load()
Dim rs As ADODB.Recordset
Set rs = New ADODB.Recordset
' Ajout de deux champs
rs.Fields.Append "Key", adInteger
rs.Fields.Append "Nom", adVarChar, 50
' Ouverture du recordset
rs.Open
' Ajout d'un enregistrement
rs.AddNew
rs!Key = 1
rs!Nom = "Pierre"
rs.Update
' Ajout d'un enregistrement
rs.AddNew
rs!Key = 2
rs!Nom = "François"
rs.Update
' Parcours du recordset
rs.MoveFirst
Do Until rs.EOF
MsgBox rs!Key & " - "
& rs!Nom
rs.MoveNext
Loop
' Fermeture du recordset
rs.Close
Set rs = Nothing
End Sub
Et voici maintenant un exemple de code liant un contrôle MSFlexGrid à un
recordset déconnecté :
Option Explicit
Private WithEvents rs As ADODB.Recordset
Private Sub Form_Load()
Set rs = New ADODB.Recordset
' Ajout de deux champs
rs.Fields.Append "Key", adInteger
rs.Fields.Append "Nom", adVarChar, 50
' Ouverture du recordset
rs.Open
' Ajout d'un enregistrement
rs.AddNew
rs!Key = 1
rs!Nom = "Pierre"
rs.Update
' Ajout d'un enregistrement
rs.AddNew
rs!Key = 2
rs!Nom = "François"
rs.Update
Set MSHFlexGrid1.DataSource = rs
End Sub
Private Sub Form_Unload(Cancel As Integer)
' Fermeture du recordset
Set MSHFlexGrid1.DataSource = Nothing
rs.Close
Set rs = Nothing
End Sub
Private Sub rs_WillChangeField(ByVal cFields As Long, ByVal Fields As Variant,
adStatus As ADODB.EventStatusEnum, ByVal pRecordset As ADODB.Recordset)
MsgBox "Un champ va être changé !", vbInformation
End Sub |