Recordset.FindNext, méthode (DAO)
S’applique à : Access 2013, Office 2013
Recherche l’enregistrement suivant dans un objet Recordset de type feuille de réponse dynamique ou instantané qui satisfait aux critères spécifiés, et en fait l’enregistrement actif (espaces de travail Microsoft Access uniquement).
Syntaxe
expression . FindNext(Criteria)
expression Variable représentant un objet Recordset.
Paramètres
Nom |
Obligatoire/facultatif |
Type de données |
Description |
---|---|---|---|
Critères |
Obligatoire |
Chaîne |
Données de type String utilisées pour localiser l'enregistrement. S'apparente à la clause WHERE d'une instruction SQL sans toutefois le mot WHERE. |
Remarques
Si vous voulez inclure tous les enregistrements dans votre recherche (et pas seulement ceux qui répondent à une condition spécifique), utilisez la méthode Move pour passer d'un enregistrement à un autre. Pour localiser un enregistrement dans un objet Recordset de type table, utilisez la méthode Seek.
Si un enregistrement correspondant aux critères n'est pas localisé, le pointeur d'enregistrement actif est inconnu et la propriété NoMatch est définie sur True. Si le recordset contient plusieurs enregistrements correspondant aux critères, FindFirst localise la première occurrence, FindNext localise l'occurrence suivante, et ainsi de suite.
Chacune des méthodes Find commence sa recherche à partir de l’emplacement et dans le sens spécifiés dans le tableau suivant.
Méthode Find |
Point de départ de la recherche |
Sens de la recherche |
---|---|---|
FindFirst |
Début du jeu d'enregistrements |
Fin du jeu d’enregistrements |
FindLast |
Fin du jeu d'enregistrements |
Début du jeu d’enregistrements |
FindNext |
Enregistrement actif |
Fin du jeu d'enregistrements |
FindPrevious |
Enregistrement actif |
Début du jeu d'enregistrements |
L'utilisation de l'une des méthodes Find n'équivaut pas à utiliser une méthode Move, qui ne fait que rendre actif l'enregistrement initial, final, suivant ou précédent sans spécifier de condition. Vous pouvez faire suivre une opération Find d'une opération Move.
Vérifiez toujours la valeur de la propriété NoMatch pour déterminer si l'opération Find a abouti. Si la recherche aboutit, NoMatch a la valeur False. Si elle échoue, NoMatch a la valeur True et l'enregistrement actif n'est pas défini. Dans ce cas, vous devez repositionner le pointeur d'enregistrement actif sur un enregistrement valide.
L'utilisation des méthodes Find avec les recordsets ODBC connectés au moteur de base de données Microsoft Access peut s'avérer inefficace. Il se peut que la reformulation de vos critères pour localiser un enregistrement spécifique soit plus rapide, surtout si vous travaillez avec des recordsets volumineux.
Dans un espace de travail ODBCDirect, la trouver et recherche méthodes non disponibles sur n’importe quel type de jeu d’enregistrements objet, car l’exécution un trouverou recherche via une ODBC connexion n’est pas très efficace via le réseau. Au lieu de cela, vous devez concevoir la requête (en utilisant l’argument source pour la méthode OpenRecordset) avec une clause WHERE appropriée qui limite les enregistrements renvoyés à ceux qui répondent aux critères que vous utiliseriez autrement dans une méthode Find ou Seek.
Lorsque vous travaillez avec des bases de données ODBC connectées au moteur de base de données Microsoft Access et des objets de type feuille de réponse dynamique volumineux, il est possible que vous notiez une certaine lenteur d'exécution lorsque vous utilisez la méthode Find ou la propriété Sort ou Filter. Pour améliorer les performances, utilisez des requêtes SQL avec des clauses personnalisées ORDER BY ou WHERE, des requêtes Paramètre ou des objets QueryDef qui extraient des enregistrements indexés spécifiques.
Il est recommandé d'utiliser le format de date des États-Unis (mois-jour-année) lorsque vous effectuez des recherches dans des champs contenant des dates, même si vous n'utilisez pas la version américaine du moteur de base de données Microsoft Access ; à défaut, les données risquent d'être introuvables. Vous pouvez utiliser la fonction Format de Visual Basic pour convertir la date. Par exemple :
rstEmployees.FindFirst "HireDate > #" _
& Format(mydate, 'm-d-yy' ) & "#"
Si les critères se composent d’une chaîne concaténée comportant une valeur non entière, et que les paramètres système spécifient un caractère décimal d’un format différent de celui des États-Unis, tel qu’une virgule (par exemple, strSQL = "PRICE > " & lngPrice, et lngPrice = 125,50), une erreur se produit lorsque vous tentez d’appeler la méthode. Il s’agit, car lors de la concaténation, le nombre est converti en une chaîne à l’aide du caractère décimal par défaut de votre système et Microsoft Access SQL accepte uniquement des caractères décimaux américains.
Remarque
Pour des performances optimales, les critères doivent être au format «champ = valeur» où champ est un champ indexé dans la table de base sous-jacente, ou au format «champ LIKE préfixe» où champ est un champ indexé dans la table de base sous-jacente et préfixe une chaîne de recherche de préfixe (par exemple, « ART* »).
En règle générale, pour des types de recherches équivalents, la méthode Seek offre de meilleures performances que la méthode Find. Cela suppose que les objets Recordset de type table suffisent à répondre à vos besoins.
Exemple
L’exemple suivant montre comment utiliser les méthodes TrouverPremier et TrouverSuivant pour rechercher un enregistrement dans un Recordset.
Exemple de code fourni parMicrosoft Access 2010 Programmer’s Reference.
Sub FindOrgName()
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
'Get the database and Recordset
Set dbs = CurrentDb
Set rst = dbs.OpenRecordset("tblCustomers")
'Search for the first matching record
rst.FindFirst "[OrgName] LIKE '*parts*'"
'Check the result
If rst.NoMatch Then
MsgBox "Record not found."
GotTo Cleanup
Else
Do While Not rst.NoMatch
MsgBox "Customer name: " & rst!CustName
rst.FindNext "[OrgName] LIKE '*parts*'"
Loop
'Search for the next matching record
rst.FindNext "[OrgName] LIKE '*parts*'"
End If
Cleanup:
rst.Close
Set rst = Nothing
Set dbs = Nothing
End Sub