Rechercher un enregistrement dans un jeu d’enregistrements DAO de type table

Utilisez la méthode Seek pour localiser un enregistrement dans un objet Recordset de type table.

Lorsque vous utilisez la méthode Seek pour localiser un enregistrement, le moteur de base de données Access utilise l’index actuel de la table, tel que défini par la propriété Index.

Notes

Si vous utilisez la méthode Seek sur un objet Recordset de type table sans définir d'abord l'index actuel, une erreur d'exécution se produit.

L'exemple suivant ouvre un objet Recordset de type table intitulé Employés et utilise la méthode Seek pour trouver l'enregistrement qui contient la valeur lngEmpID dans le champ RéfEmployé. Il renvoie la date d'embauche de l'employé.

Function GetHireDate(lngEmpID As Long) As Variant 
 
Dim dbsNorthwind As DAO.Database 
Dim rstEmployees As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDB 
   Set rstEmployees = dbsNorthwind.OpenRecordset("Employees") 
 
   ' The index name for Employee ID. 
   rstEmployees.Index = "PrimaryKey" 
   rstEmployees.Seek "=", lngEmpID 
 
   If rstEmployees.NoMatch Then 
      GetHireDate = Null 
   Else 
      GetHireDate = rstEmployees!HireDate 
   End If 
 
   rstEmployees.Close 
   dbsNorthwind.Close 
 
   Set rstEmployees = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

La méthode Seek commence toujours par chercher des enregistrements au début de l'objet Recordset. Si vous utilisez la méthode Seek avec les mêmes arguments plusieurs fois sur le même objet Recordset, elle trouvera le même enregistrement.

Vous pouvez utiliser la propriété NoMatch sur l’objet Recordset pour tester si un enregistrement correspondant aux critères de recherche a été trouvé. Si l’enregistrement correspondant aux critères a été trouvé, la propriété NoMatch aura la valeur False; Sinon, il aura la valeur True.

L’exemple de code suivant montre comment créer une fonction qui utilise la méthode Seek pour localiser un enregistrement à l’aide d’un index de plusieurs champs.

Function GetFirstPrice(lngOrderID As Long, lngProductID As Long) As Variant 
 
Dim dbsNorthwind As DAO.Database 
Dim rstOrderDetail As DAO.Recordset 
 
On Error GoTo ErrorHandler 
 
   Set dbsNorthwind = CurrentDb 
   Set rstOrderDetail = dbsNorthwind.OpenRecordset("Order Details") 
 
   rstOrderDetail.Index = "PrimaryKey" 
   rstOrderDetail.Seek "=", lngOrderID, lngProductID 
 
   If rstOrderDetail.NoMatch Then 
      GetFirstPrice = Null 
   Else 
      GetFirstPrice = rstOrderDetail!UnitPrice 
   End If 
 
   rstOrderDetail.Close 
   dbsNorthwind.Close 
 
   Set rstOrderDetail = Nothing 
   Set dbsNorthwind = Nothing 
 
Exit Function 
 
ErrorHandler: 
   MsgBox "Error #: " & Err.Number & vbCrLf & vbCrLf & Err.Description 
End Function

Dans cet exemple, la clé primaire de la table se compose de deux champs : RéfCommande et RéfProduit. Lorsque vous appelez la fonction ObtenirPremierPrix avec une combinaison (existante) valide des valeurs de champ RéfCommande et RéfProduit, la fonction renvoie le prix unitaire de l'enregistrement trouvé. Si elle ne parvient pas à trouver la combinaison de valeurs de champ que vous souhaitez dans la table, la fonction renvoie la valeur Null.

Si l'index actuel est un index à champs multiples, les valeurs de clé de fin peuvent être omises et sont traitées comme des valeurs Null. Vous pouvez dès lors omettre toutes les valeurs de clé à partir de la fin d'un argument clé d'une méthode Seek, mais pas à partir du début ou du milieu. En revanche, si vous ne spécifiez pas toutes les valeurs dans l'index, vous pouvez utiliser la chaîne de comparaison « > » ou « < » avec la méthode Seek.

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.