Question 101

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

Date de publication : 26 janvier 2003
Dernière modification : 26 janvier 2003
Rubriques : Bases de données
Mots-clés : base de données, ADO, ADODB, recordset, déconnecté, unbound