Table of contents
XML
TOC
Réduire la table des matières
Développer la table des matières

Extraire les données d’un enregistrement dans un jeu d’enregistrements DAOExtract Data from a Record in a DAO Recordset

office 365 dev account|Dernière mise à jour: 23/01/2018
|
2 Collaborateurs

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.After you have located a particular record or records, you may want to extract data to use in your application instead of modifying the underlying source table.

Copie d'un seul champCopying a Single Field

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 dans un objet Recordset.You can copy a single field of a record to a variable of the appropriate data type. The following example extracts three fields from the first record in a Recordset object.

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 

Copie de tous les enregistrements dans un tableauCopying Entire Records to an Array

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.To copy one or more records, you can create a two-dimensional array and copy records one at a time. You increment the first subscript for each field and the second subscript for each record.

Pour cela, utilisez la méthode GetRows, qui renvoie une tableau bidimensionnel. Le premier indice identifie le champ, tandis que le second identifie le numéro de ligne, comme suit.A fast way to do this is to use the GetRows method, which returns a two-dimensional array. The first subscript identifies the field and the second identifies the row number, as follows.

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.The following code example uses an SQL statement to retrieve three fields from a table called Employees into a Recordset object. It then uses the GetRows method to retrieve the first three records of the Recordset, and it stores the selected records in a two-dimensional array. It then prints each record, one field at a time, by using the two array indexes to select specific fields and records.

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.To show how the array indexes are used, the following example uses a separate statement to identify and print each field of each record. In practice, it would be more reliable to use two loops, one nested in the other, and to provide integer variables for the indexes that step through both dimensions of the array.

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

Vous pouvez utiliser des appels consécutifs de la méthode GetRows si plusieurs 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.You can use subsequent calls to the GetRows method if more records are available. Because the array is filled as soon as you call the GetRows method, you can see why this approach is much faster than copying one field at a time.

Notez également que vous ne devez pas déclarer le Variant en tant que tableau, car cette déclaration se fait automatiquement lorsque la méthode GetRows renvoie 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.Notice also that you do not have to declare the Variant as an array, because this is done automatically when the GetRows method returns records. This enables you to use fixed-length array dimensions without knowing how many records or fields will be returned, instead of using variable-length dimensions that take up more memory.

Si vous tentez d'extraire toutes les lignes à l'aide de plusieurs appels GetRows, utilisez la propriété EOF pour être certain d'être à la fin du jeu d'enregistrements. 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.If you are trying to retrieve all the rows by using multiple GetRows calls, use the EOF property to be sure that you are at the end of the Recordset. The GetRows method may return fewer rows than you request. If you request more than the remaining number of rows in a Recordset, for example, the GetRows method returns only the rows that remain. Similarly, if it cannot retrieve a row in the range requested, it does not return that row. For example, if the fifth record cannot be retrieved in a group of 10 records that you are trying to retrieve, the GetRows method returns four records and leaves the current record position on the record that caused a problem, and does not generate a run-time error. This situation may occur if a record in a dynaset was deleted by another user. If it returns fewer records than the number requested and you are not at the end of the file, you need to read each field in the current record to determine what error the GetRows method encountered.

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.Because the GetRows method always returns all the fields in the Recordset object, you may want to create a query that returns just the fields that you need. This is especially important for OLE Object and Memo fields.

© 2018 Microsoft