Rechercher un enregistrement dans un jeu d’enregistrements DAO de type table
Vous 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 .
Remarque
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.
Utilisez 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 a la valeur False ; sinon, elle sera 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 à 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. Toutefois, si vous ne spécifiez pas toutes les valeurs dans l’index, vous pouvez utiliser uniquement 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.
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