Recherche d'enregistrement

bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008 - 22 déc. 2005 à 15:14
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 - 22 déc. 2005 à 17:17
Voila, je souhaite trouver tous les enregistrement d'une table répondant à un crtitère précis (le critère ne porte pas sur la clé primaire de la table).
Pour cela, j'utilise les méthode FindFirst et FindNext (j'utilise des objet DAO en VB6)
Voila le code que j'ai produit :

Set rst = dbDroit.OpenRecordset("droit", dbOpenDynaset)


With rst
.FindFirst (![C001] & " = " & num)
While .NoMatch = False
t = rst.GetRows(1)
Debug.Print t(0, 0)
Debug.Print t(1, 0)
Debug.Print t(2, 0)
Debug.Print t(3, 0)
Debug.Print t(4, 0)
.FindNext (![C001] & " = " & num)
Wend
End With

Ca ne marche pas trés bien (sinon je serai pas la ) mais je ne sais pas quels peuvent être les probleme.
Si quelqu'un maitrise l'utilisation de ces méthodes il est le bienvenu...
Merci à tous

4 réponses

bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
22 déc. 2005 à 15:37
Bon j'ai modifié mon code ca va un peu mieux
Mais j'ai toujours le meme probleme : si les enrg recherche se suive dans la table il en saute un sur deux. Pourquoi?

Voici le code utilisé :
Set rst = dbDroit.OpenRecordset("droit", dbOpenDynaset)
Dim str As String
Dim more As Booleanstr "C001'" & num & "'"
more = True
With rst
.MoveFirst


While more = True
.FindNext str

If .NoMatch = False Then
t = rst.GetRows(1)
Debug.Print t(0, 0)
Debug.Print t(1, 0)
Debug.Print t(2, 0)
Debug.Print t(3, 0)
Debug.Print t(4, 0)
more = True
Else
more = False
End If

Wend
End With
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
22 déc. 2005 à 16:52
Salut,

J'aurais plutôt codé comme ça :
Set rst dbDroit.OpenRecordset("select * from droit where C001 '" & num & "'", dbOpenDynaset)


Do While Not rst.EOF
Debug.Print rst.Fields(0)
Debug.Print rst.Fields(1)
Debug.Print rst.Fields(2)
Debug.Print rst.Fields(3)
Debug.Print rst.Fields(4)
rst.MoveNext
Loop

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
bmikl59 Messages postés 77 Date d'inscription lundi 5 septembre 2005 Statut Membre Dernière intervention 14 février 2008
22 déc. 2005 à 16:56
Ben ca je sais que ca marche mais j'aurai bien voulu eviter l'utilisation du SQL (lui etre tres lent quand bcp d'enrg)
Enfin bon, en attendant de trouver une meilleure méthode je vais rester la dessus.

Merci
0
cs_CanisLupus Messages postés 3757 Date d'inscription mardi 23 septembre 2003 Statut Membre Dernière intervention 13 mars 2006 21
22 déc. 2005 à 17:17
C'est pourtant plus rapide et moins bouffeur de ram que de charger toute la table en mémoire. Mais bon, c'est toi qui vois.

-------------------------------------------------
Dresseur de puces, .... normal pour un loup !?
0
Rejoignez-nous