OVH Cloud OVH Cloud

FindFirst

2 réponses
Avatar
Domi
Bonjour,

J'essaie d'utiliser le code suivant, pour me repositionner sur un
enregistrement apès avoir effectué un DoCmd.ShowAllRecords (en utilisant la
clé primaire LocId)

DoCmd.OpenForm "formLoc", , , "LocId =" & Mid(objTree.SelectedItem.Key, 2)

Dim rst As DAO.Recordset
Dim CleEnreg As Long
CleEnreg = DLookup("LocId", "tblLoc")

DoCmd.ShowAllRecords

With Forms!formLoc.RecordsetClone
.FindFirst "[LocId] = " & CleEnreg
End With

Je n'ai aucun message d'erreur, mais cela reste sans effet, le premier
enregistrement reste affiché.

Si quelqu'un peut m'aider...

Merci d'avance

Domi

2 réponses

Avatar
Gilles MOUGNOZ
Bonjour,
J'essaie d'utiliser le code suivant, pour me repositionner sur un
enregistrement apès avoir effectué un DoCmd.ShowAllRecords (en utilisant
la
clé primaire LocId)
DoCmd.OpenForm "formLoc", , , "LocId =" & Mid(objTree.SelectedItem.Key, 2)
Dim rst As DAO.Recordset
Dim CleEnreg As Long
CleEnreg = DLookup("LocId", "tblLoc")
DoCmd.ShowAllRecords
With Forms!formLoc.RecordsetClone
.FindFirst "[LocId] = " & CleEnreg
End With
Je n'ai aucun message d'erreur, mais cela reste sans effet, le premier
enregistrement reste affiché.
Si quelqu'un peut m'aider...
Merci d'avance
Domi


Bonjour, Domi

Deux choses qui ne vont pas:
1) si j'ai bien compris, CleEnreg est sensé contenir la clé primaire
courante. Or, tu la remplis avec un DLookUp sur la table. Cette instruction
retourne le premier enregistrement qu'elle trouve sans se soucier de tri. Il
vaudrait mieux récupérer directement la valeur de la clé sur le formulaire:
CleEnreg = Me!LocId

2) l'instruction FindFirst change bien l'enregistrement courant pour
correspondre à la recherche. Toutefois, tu l'utilises sur le RecordsetClone,
il faut donc appliquer la même position sur le Recordset "réel":
With Forms!formLoc.RecordsetClone
.FindFirst "[LocId] = " & CleEnreg
If .NoMatch = False Then Forms!formLoc.Bookmark = .Bookmark
End With

L'instruction NoMatch permet de tester si la recherche a échoué et Bookmark
renvoie la position de l'enregsitrement courant.

Voila, ce n'est qu'une solution possible, il y en a sûrement d'autres...

Bonne continuation

Avatar
Domi
Bonjour,

Effectivement, j'avais déjà progressé un peu (ajout de l'L'instruction
NoMatch ), mais c'est bien au niveau de la récupération de la clé que j'avais
encore un problème.

Ca fonctionne parfaitement maintenant.

Merci pour tes précieux conseils.

Domi


Bonjour,
J'essaie d'utiliser le code suivant, pour me repositionner sur un
enregistrement apès avoir effectué un DoCmd.ShowAllRecords (en utilisant
la
clé primaire LocId)
DoCmd.OpenForm "formLoc", , , "LocId =" & Mid(objTree.SelectedItem.Key, 2)
Dim rst As DAO.Recordset
Dim CleEnreg As Long
CleEnreg = DLookup("LocId", "tblLoc")
DoCmd.ShowAllRecords
With Forms!formLoc.RecordsetClone
.FindFirst "[LocId] = " & CleEnreg
End With
Je n'ai aucun message d'erreur, mais cela reste sans effet, le premier
enregistrement reste affiché.
Si quelqu'un peut m'aider...
Merci d'avance
Domi


Bonjour, Domi

Deux choses qui ne vont pas:
1) si j'ai bien compris, CleEnreg est sensé contenir la clé primaire
courante. Or, tu la remplis avec un DLookUp sur la table. Cette instruction
retourne le premier enregistrement qu'elle trouve sans se soucier de tri. Il
vaudrait mieux récupérer directement la valeur de la clé sur le formulaire:
CleEnreg = Me!LocId

2) l'instruction FindFirst change bien l'enregistrement courant pour
correspondre à la recherche. Toutefois, tu l'utilises sur le RecordsetClone,
il faut donc appliquer la même position sur le Recordset "réel":
With Forms!formLoc.RecordsetClone
.FindFirst "[LocId] = " & CleEnreg
If .NoMatch = False Then Forms!formLoc.Bookmark = .Bookmark
End With

L'instruction NoMatch permet de tester si la recherche a échoué et Bookmark
renvoie la position de l'enregsitrement courant.

Voila, ce n'est qu'une solution possible, il y en a sûrement d'autres...

Bonne continuation