|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Futur Membre du Club
![]() Inscription : juillet 2006 Messages : 57 ![]() |
Bonjour,
Le contexte : 1 - Je visualise dans un formulaire "détail" un enregistrement quelconque. 2 - Dans ce formulaire, j'ai un bouton 'Ajout' qui me permet de créer un nouvel enregistrement et un bouton 'Annuler'. 3 - Je lance la création d'un nouvel enregistrement en cliquant sur le bouton 'Ajout' (au passage j'ai mémorisé l'Id de l'enregistrement courant dans une variable 'pl_EnregCourant'). 4 - Je commence ma saisie d'informations et finalement je l'interrompt (pour X raisons). A ce stade, je souhaite revenir à l'enregistrement de départ càd celui que je visualisais avant de cliquer sur le bouton 'Ajout' J'ai donc le code suivant dans mon bouton 'Annuler' --> Code :
Au final, je ne reviens pas sur l'enregistrement escompté mais toujours sur le premier du reccordset. Pouvez-vous SVP m'aider car je tourne en rond ? Que faut-il modifier pour que mon code fonctionne ? Merci d'avance Cordialement oracle7556 |
||
|
|
00
|
|
|
#2 |
|
Membre habitué
![]() Conseil - Consultant en systèmes d'information Inscription : octobre 2008 Messages : 212 ![]() |
Bonsoir,
2 constats (questions ...) : Tu écris : Code :
vsCritere = "EAL_NUM =" & Str(pl_EnregCourant) De plus, si le FindFirst ne trouve aucun enregistrement il passe directement à la ligne 10. où tu fermes l'objet OrS. La dernière instruction exécutée est alors la ligne 4 avec le Requery qui te positionnes sur le 1° enregistrement ... Tu dois pouvoir supprimer le test de la ligne 9 (le N° d'enregistrement de l'enregistrement précédent existe forcément !) et avoir dans la ligne 9 uniquement : Code :
Forms(psFormCourant).Bookmark = oRS.Bookmark |
|
|
00
|
|
|
#3 |
|
Futur Membre du Club
![]() Inscription : juillet 2006 Messages : 57 ![]() |
Bonsoir Triton972
Merci de ta réponse. 1 - Désolé mais la méthode 'Recordset.Findfirst' attend comme paramètre une chaîne pour le critère de recherche (voir l'aide en ligne). C'est donc pourquoi je convertis la référence numérique de mon champ 'EAL_NUM' en chaine. Au final le critère de recherche vient par exemple la chaine : "EAL_NUM = 123". 2 - J'ai bien supprimé le test de la ligne 9 comme tu le proposes mais cela ne change rien. Je reviens toujours sur le premier enregistrement du recordset et non sur l'enregistrement désigné. 3 - J'ai vérifié avec des debug.print, la méthode 'Recordset.Findfirst' trouve bien mon enregistrement. debug.print oRS!EAL_NUM --> donne bien 123 après le findfirst (pl_EnregCourant = 123 pour mémoire). 4- Une précision, en fait mon code (décrit dans mon premier post) se trouve dans une Sub 'AnnulerEnreg' appelée par l'évènement SurClic du bouton 'Annuler'. Le fait d'extérioriser le traitement en dehors du formulaire, n'a-t-il pas une influence sur la recherche de l'enregistrement ? Question idiote O/N ? Je continue à chercher ... Cordialement oracle7556 |
|
|
00
|
|
|
#4 | ||||||
|
Membre habitué
![]() Conseil - Consultant en systèmes d'information Inscription : octobre 2008 Messages : 212 ![]() |
Bonsoir,
Je pensais plutôt à : Code :
Dans le code du bouton "ajout" : Code :
Code :
@+ |
||||||
|
|
00
|
|
|
#5 | ||
|
Futur Membre du Club
![]() Inscription : juillet 2006 Messages : 57 ![]() |
Bonjour Triton972
Désolé mes tes propositions ne fonctionnement pas. Je m'explique : 1 - Citation:
2 - Citation:
3 - Après le 'Undo' il n'y a plus d'enregistrement dit actif dans le recordset d'ou l'obligation de faire un 'Requery' pour le réactiver mais ce dernier active toujours le premier enregistrement du recordset. il faut donc se déplacer et sélectionner l'enregistrement que l'on veut rendre actif. Au final, il y a à mon sens autre chose qui se passe et que je ne vois pas. Merci quand même de ton aide. Cordialement oracle7556 |
||
|
|
00
|
|
|
#6 | ||
![]() ![]() |
Bonjour,
En remplaçant "EnregistrementId" par le nom du champ qui contient tes Id. Code :
__________________
Vous avez des montres, nous avons le temps ! (citation attribuée à L.-S. Senghor) Ici, on ne perd pas de temps ! On en passe... Ce message (ou un autre) vous a aidé ? Votez pour lui avec
|
||
|
|
00
|
|
|
#7 |
|
Membre habitué
![]() Conseil - Consultant en systèmes d'information Inscription : octobre 2008 Messages : 212 ![]() |
bonjour Oracle7556,
Désolé mais tout ce que je t'ai écrit a été testé et fonctionne ! mais... Pour pl_enregsuivant : redéfini une nouvelle variable avec le bon type mais je pensais que tu avais compris la transcription ... Pour ton info : l'opérateur concaténer & accepte, sans problème, la plupart des types de données sans nécessité de conversion. C'est un de ses principales atouts. Donc : & var_string & var_long & var_string & var_date & var_boolean est parfaitement légitime et le résultat est une variable string ! Fais un test dans ta fenêtre Exécution (CTRL G) de ta section Visual Basic pour en être convaincu ( avec un petit Code :
? vartype ("xyz " & 12 & now & " abvc " & true) Bon courage à toi |
|
|
00
|
|
|
#8 |
|
Futur Membre du Club
![]() Inscription : juillet 2006 Messages : 57 ![]() |
Bonsoir à tous
Ne cherchez plus, j'ai trouvé l'origine de mon problème. Le code décrit dans mon premier post marche en fait nickel. Le patacaisse (erreurs aléatoires mais souvent la même : n°2046) venait du fait que j'avais un 'me.undo' dans le 'Form_BeforeUpdate' de mon formulaire de détail ce qui faisait échoué le 'FindFirst'. Je l'ai supprimé suite à un message d'erreur bizarre à propos du 'undo'. J'ai donc recherché partout où j'utilisais 'undo' et je suis tombé dessus. Voilà, dans tous les cas Merci à Triton972 et Domi2 pour leur aide sympathique. Je considère donc le post comme résolu. ![]() Cordialement oracle7556 |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com