harmedevil
Messages postés16Date d'inscriptionsamedi 16 octobre 2004StatutMembreDernière intervention16 septembre 2008
-
15 sept. 2008 à 21:51
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDerniè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
harmedevil
Messages postés16Date d'inscriptionsamedi 16 octobre 2004StatutMembreDernière intervention16 septembre 2008 16 sept. 2008 à 02:47
Au fait je viens d'essayer un truc ^^ parceque je sentais que le problème etait au niveau du recodset alors dans la déclaration de la fonction g supprimé le "as recodset" comme ceci:
Public Function rechmat(rs, x As Variant, y As String) As Boolean
rs.MoveFirst
rechmat = False
Do While rs.EOF = False
If x = rs.Fields(y) Then
rechmat = True
Exit Function
Else
rs.MoveNext
End If
Loop
End Function
et dans la déclaration:
Private Sub mat_Change()
Dim x As Variant
x = mat.Text
If rechmat(rse, x, "Matricule") = True Then
nom.Text = rse!nom
End If
End Sub
et ca a marché !!! comme ca dans ma form une fois que je quitte le champ matricule le nom s'affiche !!!!
merci encore :) j'y serai jamais arrivé sans toi
Vous n’avez pas trouvé la réponse que vous recherchez ?
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 sept. 2008 à 03:14
Oui c' est parceque' un recordset doit être passé ByVal et pas par Ref.
Le ByVal étant par défaut, ça marche juste avec: rs, x As Variant, y As String
Encore deux ou trois plus trucs..
1° Evites l' événement Change()
Pourquoi ?
Parceque ta fonction se déclenchera dès que tu tapes un caractère.
Elle se déclenchera aussi si tu supprimes le contenu de la textbox
pour saisir autre chose.
Utilises un ButtonCommand pour lancer la recherche.
2°Pour faire une fonction générale, fais ta recherche avec un recordset local en passant en paramètre le nom de la table dans laquelle tu veux effectuer la recherche.
Exemple:
Public Function rechmat(xTable As String, x As Variant, y As String) As Boolean
Dim rs As RecordSet
Set rs=CurrentDB.OpenRecordSet(xTable,dbOpenSnapshot)
If rs.Eof And rs.Bof Then
MsgBox "Table vide!"
Exit Function
End If
rs.MoveFirst
rechmat = False
Do While rs.EOF = False
If x = rs.Fields(y) Then
rechmat = True
Exit Function
Else
rs.MoveNext
End If
Loop
End Function
Lors de l' appel tu fais comme ceci par exemple
If rechmat("Employés",xValeur,"Matricule")=True Then
...
NB: CurrentDB désigne ta bas de donnée ouverte.
Tu peux utiliser une variable(xDb par exemple)
Et dernière chose, nommes la d'un nom général.
Cette fonction te servira pour toutes tes applications.
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 sept. 2008 à 03:42
A notre tour de te faire travailler !
Enoncé de l' exercice:
1° Faire la recherche avec FindFirst.
a) Valeur exacte
Rechercher "Mohamed"
b) valeur partielle
Rechercher tous les noms commençant par "Mo"
harmedevil
Messages postés16Date d'inscriptionsamedi 16 octobre 2004StatutMembreDernière intervention16 septembre 2008 16 sept. 2008 à 03:58
hehehe c po vraiment le moment pour reflechir tu c loool 1h50 du mat + la periode du ramadan loool
mais je dirai:
a- "nom de la base de données".Recordset.FindFirst [Nom] ="Mohamed" nn?
b- Euuuuh je jette un coup d'oeil sur google lol
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 sept. 2008 à 03:59
Oui PCPT, je m' en doutais
car en fait n son rs étant publique et étant donné qu' il le oasse comme tel
c à d en y faisant REFERENCE, le As RecordSet était de trop.
S' il a fait par exemple xRs là il fallaut ajouter As RecorSet.
Enfin je crois
Je n' ose plus être catégorique
PCPT
Messages postés13272Date d'inscriptionlundi 13 décembre 2004StatutMembreDernière intervention 3 février 201847 16 sept. 2008 à 04:23
harmedevil mettait :
If x = records.Fields(y) Then
libre_max tu as mis :
If x = rse.Fields(xChp) Then
youhou çà marche...
ah bon?
beh ouai, l'erreur de type était un BYREF de Type RECORDSET attendu, mais pas d'erreur pour le non RSE inconnu?
réponse : soit le RS (peu importe le nom) est déclaré en public NOM_RS (donc implicitement "as variant"), soit il n'est même pas déclaré....
byval ou byref, recordset pour un variant, VB n'aime pas trop ^^
<hr size="2" width="100%" />Prenez un instant pour répondre à [sujet-SONDAGE-POP3-POUR-CS_769706.aspx ce sondage] svp
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 sept. 2008 à 05:19
De retour chez moi.
Bien installé et surtout bien éclairé
-beh ouai, l'erreur de type était un BYREF de Type RECORDSET attendu,
Exact !
-mais pas d'erreur pour le non RSE inconnu?
Son tour viendera après qu' il eut passé la première erreur.
Erreur ;"Objet ou bloc with non défini"
réponse : soit le RS (peu importe le nom) est déclaré en public NOM_RS (donc implicitement "as variant")
S' il est déclaré, tout laisse à croire que c' est ainsi:
Public rs As RecordSet
> As Recordset et implicitement As RecordSet.
Que vient faire le Variant là dedans ?
, soit il n'est même pas déclaré...
l' erreur se rèfèrera à rse: Erreur ;"Objet ou bloc with non défini"
Car le rs sera considéré comme argument et non une variable.
Et on est pas obligé de déclarer les arguments.
Rappel : ce qui maechait pour lui c' était:
il a écrit:
Au fait je viens d'essayer un truc ^^ parceque je sentais que le problème etait au niveau du recodset alors dans la déclaration de la fonction g supprimé le "as recodset" comme ceci:
Public Function rechmat(rs, x As Variant, y As String) As Boolean
rs.MoveFirst
rechmat = False
Do While rs.EOF = False
If x = rs.Fields(y) Then
rechmat = True
Exit Function
Else
rs.MoveNext
End If
Loop
End Function
Pour moi ça auraut été une erreur s' il avait mis
Public Function rechmat(rs As RecordSet, x As Variant, y As String) As Bool
étant donné qu' il se rèfère à rs variable public.
Enfin , je crois toujours ..
De toute façon pour les déclarations, je comptais bien sur lui pour réctifier.
J' avais prévenu pour les erreur
LIBRE_MAX
Messages postés1402Date d'inscriptionmardi 1 mai 2007StatutMembreDernière intervention 7 octobre 20126 16 sept. 2008 à 06:49
Allez ! On laisse ça pour demain ,ou plutôt aujourd' hui.
J' ai pas encore dormi de la buit !
Dieu sait à quelle heure je vaIs me lever pour le boulot !!?