Aide sur ADO [Résolu]

Signaler
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008
-
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
-
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.
A voir également:

45 réponses

Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Ok !
Maintenant fais exactement ceci. Et à la lettre !
Public Function RECHERCHER(xValeur As Variant, xChamp As String) _
As Boolean
rse.MoveFirst
rechmat = False
Do While Not rse.EOF
 If x = rse.Fields(xChp) Then
   rechmat = True  
   Exit Function
 End If   
 rse.MoveNext
Wend
End Function


Ensuite places un ButtnCommand dans ton formulaire
et nommes le cmdRecherche


Dans l' événement Click


Private Sub cmdRecherche
  Dim Valeur As Variant
  Valeur=Text(1).Text
  If Rechercher(Valeur,"Matricule")=True Then
     MsgBox "Trouvé"
  Else
    MsgBox " Introuvable"
  End If


End Sub


Si ça marchen fais une autre recherche dans le champ Nm
Private Sub cmdRecherche
  Dim Valeur As Variant
  Valeur=Text(1).Text
  If Rechercher(Valeur,"Nom")=True Then
     MsgBox "Trouvé"
  Else
    MsgBox " Introuvable"
  End If


End Sub
 





<hr />




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


<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
rectifies
 RECHERCHER = False

Do While Not rse.EOF
 If xValeur= rse.Fields(xChamp) Then
   RECHERCHER = True  
   Exit Function
 End If   
rse.MoveNext
Wend
End Function
<hr />

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

<hr />
Messages postés
13280
Date d'inscription
lundi 13 décembre 2004
Statut
Modérateur
Dernière intervention
3 février 2018
42
Salut,
EDIT....
tu as reposté mais ce n'était pas plus lisible, je reposte ton message ;)

<hr size="2" width="100%" />



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.





<hr size="2" width="100%" />




tu aurais pu faire un effort de français.... 
le TYPAGE n'est pas facultatif.....
si ELMT est un STRING, ce n'est pas


records!elmt


mais


records.fields(elmt).value
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
"je voudrais faire une fonction qui puisse me servir pour n'importe quel element"

Il suddit alors de passer le nom du champ en âramètre



Public Function rechmat(records As RecordSet, cChp As String , x As String) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If Trim(x) = Trim(records.Fields(xChp)) Then
rechmat = True
Exit Function
Else
records.MoveNext
End If
Wend
End Function

Seulement voilà :
Cet exemple n' est valable que pour un champ type string.

Pour avoir une function valable pur n' importe quel type de champ,
Il faudra passr l' argument x en variant et faire abstractio
de Trim..

Public Function rechmat(records As RecordSet, cChp As String, x As Variant) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If x = records.Fields(xChp) Then
rechmat = True
Exit Function
End If
records.MoveNext

Wend
End Function

Autre façon de faire: Utiliser le numéro ordinal du champ
au lieu de son nom.

Public Function rechmat(records As RecordSet, cChp As Integer x As Variant) As Boolean
records.MoveFirst
rechmat = False
While records.EOF = False
If x = records.Fields(xChp) Then
rechmat = True
Exit Function
End If
records.MoveNext

Wend

End Function

<hr />

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

<hr />
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

Je suis désolé j'utilise Opera c'est pourquoi je ne voyais pas le plugin de word...
Je tiens a vous remércier d'avoir réponsu ci vite c'est très gentil ^^
Je vais peut etre abuser mais pour l'appelle je fais comment parsqu'il me sort une erreur " Byref argument type mismatch" !!
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Supposons que tu cherches le Matricule 208 et que ta fonctio s' appelle REXCHERCHER

tU L4 APPELLE COMME CECI/
iF rECHERCHER(rs,"Matricule",208)=True Yjen
<Traitement>
Else
MsgBox "...Introuvable !"
End If
Remarques:
Si ton recordset est publique, il n' est pas necessaire
de le passer en paramçtre.
Essayes de construire ta fonction ainsi:

Public Function RECHERCHER(XChp As String, x As Variant)
As Boolean

<hr />

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

<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Désolé pour les erreurs de frappes, mais j' ai du mal en ce moment à voir ce que je tapes !

<hr />

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

<hr />
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

Oh c'est déja un grand effort de prendre le temps de lire mes bétises!!! :)


c encore trs gentil a toi ... cempendant l'interetde ma fonction et de comparer par exemple le matricule(qui sera sais au clavier) avec un autre qui fera parti de l'élément Matricule d'une table.

Private Sub Text1_Change(Index As Integer)
    If rechmat(rse, Text1(1), Matricule) = True Then
        nom.Text = rse!nom
    End If
End Sub  

rse: Le recordset
text1(1): Le texte a comparer (Je sais ca va sans dire... mas je l'écris vu ta sinatr lol)
Matricule: c'est l'élément avec lequel sera comparé le text1(1) 
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
l' erreur sur le type peut provenir de la variable x.
qu' Il faut la déclarer Variant.


Exemple
Dim x As Variant
x=208
iF rECHERCHER(rs,"Matricule",x)=True Then
<Traitement>
Else
MsgBox "...Introuvable !"
End If





<hr />




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


<hr />
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

des petites fautes de frappe donc je le réecris: :p

Oh c'est déja un grand effort de prendre le temps de lire mes bétises!!! :)

c encore très gentil a toi ... cependant l'interet de ma fonction est de comparer par exemple le matricule(qui sera saisi au clavier) avec un autre qui fera parti de l'élément Matricule d'une table.

Private Sub Text1_Change(Index As Integer)
    If rechmat(rse, Text1(1), Matricule) = True Then
        nom.Text = rse!nom
    End If
End Sub  

rse: Le recordset
text1(1): Le texte a comparer (Je sais ca va sans dire... mas je l'écris vu ta signature lol)
Matricule: c'est l'élément avec lequel sera comparé le text1(1) 
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
dans rechmat(rse, Text1(1), Matricule)  tu as intervertit les paramètres

Si ta Fonction est déclarée comme ceci:

rechmat(rse, NomDuChamp, ValeurDuChamp)

L' appelle sera
rechmat(rse, "Matricule", Me.Text1(1).Text)

Mais si ton champ matricyle est numérique, tu dois convertir Text(1à.Text en Integer ou en long avant.

<hr />

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

<hr />
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
je parlais de moi pour les petites fautes de frappe ...
Je suis en ce moment dans un endroit mal éclairé.

<hr />

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

<hr />
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

Je te montre ma fonction etma declaration mainenant:

Public Function rechmat(records As Recordset, x As Variant, y As String) As Boolean


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

Private Sub Text1_Change(ByRef Index As Integer)
    If rechmat(rse, Text1(1).Text, "Matricule") = True Then
        nom.Text = rse!nom
    End If
End Sub

J'ai maintenant une erreur "type mismatch sur la ligne: "  If rechmat(rse, Text1(1).Text, "Matricule") = True Then"

Désolé de prendre de votre temps
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

attends un peu!!! t marocain??
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
changes le nom de ton recordset.
records est un mot réservé.

Public Function rechmat(rs As Recordset, x As Variant, y As String) As Boolean

Private Sub Text1_Change(ByRef Index As Integer)
 Dim x As Variant
Si tin champ est de type String
 x=Text(1).Text
Si tin champ est de type Integer
x=CInt(Text(1).Text)

  If rechmat(rse, x, "Matricule") = True Then
        nom.Text = rse!nom
    End If
End Sub

<hr />

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

<hr />
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

Je viens d'esayer ta solution qui est tout à fit logique mais j'ai toujours l'erreur "type mismatch" sur la ligne "If rechmat(rse, x, "Matricule") = True Then". :s :s
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
Reprenons:
Comment se nommes ton recordset ?
Est-il  publique ?

<hr />

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

<hr />
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

wiwi il est public et il se nomme "rse"! 
Messages postés
16
Date d'inscription
samedi 16 octobre 2004
Statut
Membre
Dernière intervention
16 septembre 2008

Merci pour ton aide ^^ ca marche!! J'essairai de l'adapter celon mon cas !! merci encore  et désolé d'avoir pris de ton temps :) llah ikter khirek !!!
Messages postés
1402
Date d'inscription
mardi 1 mai 2007
Statut
Membre
Dernière intervention
7 octobre 2012
5
A la bonheur !
Et à la prochaine, inch ' ALLAH..
<hr />

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

<hr />