Aide sur ADO

Résolu
harmedevil Messages postés 16 Date d'inscription samedi 16 octobre 2004 Statut Membre Dernière intervention 16 septembre 2008 - 15 sept. 2008 à 21:51
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 - 16 sept. 2008 à 17:09
Bonjour à tous ^^,
je vous explique mon problème!
Je suis débutant sur ADO ... Dans un projet je dois parcourir un recordset et faire une reherche voila comment g procédé: g crée une fonction dans le module pour pouvoir l'appeler dans tout le projet comme suit:

records est le recordset et x l'élément recherché

Public Function rechmat(records, x) As Boolean

records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records!Matricule) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend

End Function


cela marche tres bien cependant je voudrais faire une fonction qui puisse me servir pour n'importe quel element, po seulement "Matricule"!!!! g essayé ceci mais ca ne marche po :

Public Function rechmat(records, x, elmt) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records!elmt) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
'Wend

End Function

Si quelqu'un a une petite idée ^^ merci d'avance.

45 réponses

PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 sept. 2008 à 12:50
en effet tes test sont incorrects LIBRE_MAX ^^



Option Explicit




Public 
p   
As Byte




Private Sub 
Form_Load()

   
    Call test(800)
    MsgBox p '<- 0, et non 800 NI erreur

End Sub

Sub test(p) 'byref implicit, variant
implicit
    p = 256
End Sub



<hr size="2" width="100%" />
Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
16 sept. 2008 à 14:53
Bonjour PCPT,


Sont incorrects à moitié seulement, je pense !
En fait ce qui m' interessais moi dans l' histoire c' était pas de passer la valeur 800 en paramètre,mais de voir si l' argument p sera pris ou pas comme étant la variable publique donc déjà déclarée et typée.
Là tu avais raison sur le fait qu' un argument non typé sera implicitement variant.


Je reconnais que ça je le savais déjà, mais sur le moment je me suis lancé dans une explication du ByRef un peu hasardeuse.En plus j' ai confondu la valeur par defaut.
Mais ça , ça s' explique par le fait que je ne procède jamais de la sorte.
Je ne passe jamais une variable publique en paramètre, et je n' utilise jamais ni ByRef ni ByVal.Les puristes pourront dire ce qu' ils veulent, moi ça ne m'a jamais posé problème.


En résumé, pour l' implicitement variant tu avais explicitement raison.


Bonne fin de journée.

PS: Avouer aussi que coté erreurs de frappes,
ça été un festival ..
Alors si quelqu' un fait une recherche sur Erreur de frappes ,  ByRef - ICI


 








 





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
16 sept. 2008 à 16:27
Au fait PCPT, tu as faussé le problème en jouant sur le type.
Non non non !
Il faudra garder le même type et prouver que le nom de la variable n' a pas d' importance.


Alors analyses le but de ceci:


Option Explicit

Dim p As Byte

Sub test(p)
p = 38
End Sub

Private Sub Form_Load()
test p
MsgBox p
End Sub

Comment expliquer que la valeur de p est maintenant 38 ?
Normal me direz-vous, la sub aurait bien pu s' ecrire
Sub test()
p = 38
End Sub

ça c' est vrai, et c' est se que je préconise.
Mais pourquoi 38 n ' est pas attribué à l' argument p ,qui variant ou pas, ne change rien au fait que c' est ma variable qui change ?

D' un autre coté, l' erreur dépassement de capacité
Sub test2(p)
p = 256
End Sub

est une preuve que c' est ma variable publique qui est prise en compte.

C' est elle aussi qui change dans
Sub test(p As Byte)
p = 38
End Sub

Je commence à me redonner raison ;-)
0
LIBRE_MAX Messages postés 1402 Date d'inscription mardi 1 mai 2007 Statut Membre Dernière intervention 7 octobre 2012 6
16 sept. 2008 à 16:39
OH ! la cata  !
Désolé, je reposte.
Au fait PCPT, tu as faussé le problème en jouant sur le type. Non non non ! Il faudra garder le même type et prouver que le nom de la variable n' a pas d' importance.
Analyses le but de ceci:


Option Explicit
Dim p As Byte

Sub test(p)
 p = 38
End Sub

Private Sub Form_Load()
 test p
 MsgBox p
End Sub

Comment expliquer que la valeur de p est maintenant 38 ? Normal me direz-vous, la sub aurait bien pu s' ecrire

Sub test()
 p = 38
End Sub

ça c' est vrai, et c' est se que je préconise. Mais pourquoi 38 n ' est pas attribué à l' argument p ,qui variant ou pas, ne change rien au fait que c' est ma variable qui change ?
D' un autre coté, l' erreur dépassement de capacité
Sub test2(p)
 p = 256
End Sub

est une preuve que c' est ma variable publique qui est prise en compte. C' est elle aussi qui change dans

Sub test(p As Byte)
 p = 38
End Sub


je ne sais as ce que tu en penses mais je commence à me redonner raison




 





<hr />




[] Ce qui va sans dire. va mieux en le disant.


<hr />
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
PCPT Messages postés 13272 Date d'inscription lundi 13 décembre 2004 Statut Membre Dernière intervention 3 février 2018 47
16 sept. 2008 à 17:09
arrête de t'emberlificoter avec de faux tests.....

 test p

tu appelles ta fonction ou procédure avec ta variable public en argument BYREF, c'est normal qu'elle soit modifiée, même si ton argument s'appelait v pour v = 38 çà serait la même chose....
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
0
Rejoignez-nous