Extraire les données d’un enregistrement d’un jeu d’enregistrements DAO
Après avoir localisé un ou des enregistrements, vous pouvez souhaiter extraire les données afin de les utiliser dans votre application au lieu de les modifier dans la table source sous-jacente.
Copier un champ unique
Vous pouvez copier un seul champ d'un enregistrement vers une variable du type de données approprié. L’exemple suivant extrait trois champs du premier enregistrement d’un objet Recordset .
Dim dbsNorthwind As DAO.Database
Dim rstEmployees As DAO.Recordset
Dim strFirstName As String
Dim strLastName As String
Dim strTitle As String
Set dbsNorthwind = CurrentDb
Set rstEmployees = dbsNorthwind.OpenRecordset("Employees")
rstEmployees.MoveFirst
strFirstName = rstEmployees!FirstName
strLastName = rstEmployees!LastName
strTitle = rstEmployees!Title
Copier des enregistrements entiers dans un tableau
Pour copier un ou plusieurs enregistrements, vous pouvez créer un tableau bidimensionnel et copier un enregistrement à la fois. Vous incrémentez le premier indice de chaque champ et le second indice de chaque enregistrement.
Pour ce faire, vous pouvez utiliser la méthode GetRows , qui retourne un tableau à deux dimensions. Le premier indice identifie le champ, tandis que le second identifie le numéro de ligne, comme suit.
varRecords(intField, intRecord)
L’exemple de code suivant utilise une instruction SQL pour extraire 3 champs d’une table intitulée Employés dans un objet Recordset. Ensuite, il utilise la méthode GetRows pour extraire les 3 premiers enregistrements du jeu d’enregistrement et stocke les enregistrements sélectionnés dans un tableau à 2 dimensions. Puis, il imprime chaque enregistrement, champ par champ, en utilisant les 2 index de tableau pour sélectionner les champs et enregistrements.
Pour illustrer l'utilisation des index de tableau, l'exemple suivant utilise une instruction distincte pour identifier et imprimer chaque champ de chaque enregistrement. Dans la pratique, il est plus fiable d'utiliser deux boucles, l'une imbriquée dans l'autre, et de fournir des variables de type entier pour les index qui concernent les deux dimensions du tableau.
Sub GetRowsTest()
Dim dbsNorthwind As DAO.Database
Dim rstEmployees As DAO.Recordset
Dim varRecords As Variant
Dim intNumReturned As Integer
Dim intNumColumns As Integer
Dim intColumn As Integer
Dim intRow As Integer
Dim strSQL As String
On Error GoTo ErrorHandler
Set dbsNorthwind = CurrentDb
strSQL = "SELECT FirstName, LastName, Title FROM Employees"
Set rstEmployees = dbsNorthwind.OpenRecordset(strSQL, dbOpenSnapshot)
varRecords = rstEmployees.GetRows(3)
intNumReturned = UBound(varRecords, 2) + 1
intNumColumns = UBound(varRecords, 1) + 1
For intRow = 0 To intNumReturned - 1
For intColumn = 0 To intNumColumns - 1
Debug.Print varRecords(intColumn, intRow)
Next intColumn
Next intRow
rstEmployees.Close
dbsNorthwind.Close
Set rstEmployees = Nothing
Set dbsNorthwind = Nothing
Exit Sub
ErrorHandler:
MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description
End Sub
Utilisez les appels suivants à la méthode GetRows si d’autres enregistrements sont disponibles. Comme le tableau est complété dès que vous appelez la méthode GetRows, vous voyez tout de suite pourquoi cette approche est beaucoup plus rapide que de copier un champ à la fois.
Notez également que vous n’avez pas besoin de déclarer la variante en tant que tableau, car cette opération est effectuée automatiquement lorsque la méthode GetRows retourne des enregistrements. Vous pouvez ainsi utiliser des dimensions de tableau de longueur fixe sans savoir combien d'enregistrements ou de champs seront renvoyés, au lieu d'utiliser des dimensions de longueur variable qui occupent de la mémoire.
Si vous essayez de récupérer toutes les lignes à l’aide de plusieurs appels GetRows , utilisez la propriété EOF pour vous assurer que vous êtes à la fin de l’objet Recordset. La méthode GetRows peut renvoyer moins de lignes que demandé. Si vous demandez plus de lignes que le nombre de lignes restantes dans un jeu d'enregistrements, par exemple, la méthode GetRows ne renvoie que les lignes restantes. De même, s'il est impossible d'extraire une ligne dans la plage demandée, cette ligne ne sera pas renvoyée.
Par exemple, s'il est impossible d'extraire le cinquième enregistrement d'un groupe de 10 enregistrements que vous tentez d'extraire, la méthode GetRows renverra quatre enregistrements, laissera la position actuelle sur l'enregistrement qui a posé un problème et ne générera pas d'erreur d'exécution. Cette situation peut se produire si un enregistrement d'une feuille de réponse dynamique a été supprimé par un autre utilisateur. Si la méthode renvoie moins d'enregistrements que le nombre demandé et que vous n'êtes pas à la fin du fichier, vous devez lire chaque champ de l'enregistrement actif pour déterminer l'erreur rencontrée par la méthode GetRows.
Comme la méthode GetRows renvoie toujours tous les champs de l'objet Recordset, vous pouvez souhaiter créer une requête qui renvoie uniquement les champs requis. Ceci est particulièrement important pour les champs de type Objet OLE et Mémo.
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.
Commentaires
https://aka.ms/ContentUserFeedback.
Bientôt disponible : Tout au long de 2024, nous allons supprimer progressivement GitHub Issues comme mécanisme de commentaires pour le contenu et le remplacer par un nouveau système de commentaires. Pour plus d’informations, consultezEnvoyer et afficher des commentaires pour