Aide pour bouton recherche [Résolu]

Signaler
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011
-
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
-
Bonjour,
voila mon problème: je cherche a faire une application VB6 ds le but de faire une recherche ds une base de donnée Access contient une table de 3 champs "code" "nom" "prénom" , j utilise comme référence microdoft DAO 3.6 .
mon interface vb contient zone de texte "txtcode" , bouton "cmdrecherche" et 2 zones de textes nom et prénom .
merci de me rependre

26 réponses

Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Tu n'as pas pris note de ce que j'ai dit précédemment !!!
Private Sub Cmdrecherche_Click() 
    Dim lRec As Recordset 
    Dim rech As String 
    
    rech "SELECT * FROM table WHERE code " & cint(txtcode.Text) & ";" 
    set lRec=base.OpenRecordset(rech)
    Text2.Text = lRec![nom] 
    Text3.Text = lRec![prenom] 
    lRec.Close
End Sub 


Préfères toujours utiliser des variables les plus locale possible.
Dans ce cas, tu verra que sans le OpenRecordSet, ça ne passe pas.

Mon site
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Conseil, évite ADO (qui est plus obsolète que VB6, qui l'est déjà un peu (depuis plus de 8 ans)), préfères ADO.

Il te faut faire une requête SQL du genre :
SELECT * FROM Table WHERE Champ=Valeur

si tu veux plus de précision, précise ta demande.

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

Bonjour Henry,
merci pour ta réponse
au faite j ai utilisé une instruction que j ai trouver sur le forum de Vbfrance c est :
rech = "SELECT * FROM table WHERE code LIKE '" & txtcode.Text & "%';" (rech est déclaré comme un string)
apres j ajoute les deux ligne suivant!
txtnom = enreg![nom] (enreg est déclaré comme recordset)
txtprenom = enreg![prénom]
quand j exécute le programme et en tapant un code à rechercher, il il affiche le nom et prénom qui appartient pas au code désire
(pour info ma table contien plus que 40000 enregestrement)
merci avance pour t a réponse
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Il me semble que sur Access, ce n'est pas % mais *
Sinon, autre méthode de test, voir la requête que tu veux exécuter (pas à pas + espion), ensuite, l'exécuter à la main dans Access.

Que donne ta requête avant exécution (la ligne SQL "SELECT ...") ?

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

bonsoir Henry
dsl pour le retard
j ai exécuter la requête SQL , il marche très bien .
j ai changée % par * et matche pas aussi ,le problème c est ds le VB alors je donne n importe quel code il m indique toujours le même personne sauf bien sur si je donne un code qui appartient pas il donne un débogage (j ai pas encors vu se cas la)
et merci pour tout
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Quelle est la valeur de rech ?
Essayes peut être :
rech = "SELECT * FROM table WHERE code LIKE """ & txtcode.Text & "*"""

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

bonjour,
pour le type de rech c est string
même la ligne ( rech = .....) n a rien donne , toujours le même problème il se fixe sur une seul enregistrement toujours le meme , meme si je change le code
j ai changer le type de rech en " integer , long " sa donne un débogage
et je viens de découvrir que même si je tape rien ds la zone de texte il me donne le même enregistrement
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Quel est le contenu de rech en execution ?
As-tu testé la requête directement dans Access (sans passer pas VB) ?

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

bonjour,
pour le contenu de rech en exécution c est code numérique
et pour la requête en access marche très bien sans problème
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Je te demande le contenu, c'est à dire la valeur, pas la manière dont tu formes le contenu.
Rech="SELECT ...
Avec un espion, Shift+F9.

Si ça fonctionne bien dans Access et pas dans ton code, c'est qu'il y a une différence d'accès.
Mais je ne peux pas en dire plus.

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

bonjour,
pour le contenu de rech en exécution c est:

rech = "SELECT * FROM table WHERE code LIKE '" & Textcode.Text & "%*;"

et pour Shift+F9 j ai pas compris

et merci
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Je te demande la valeur en execution, pas comment tu la construit.
rech = "SELECT * FROM table WHERE code LIKE '" & Textcode.Text & "%*;"
est le code, mais en execution, que contient rech ?
Pour cela, mets un point d'arrêt sur la ligne qui suit et sélectionne la valeur puis Shift+F9 et tu note ce qu'il y a écrit dedans.

Sinon pour la ligne, elle est forcément fausse, voici la correction :
rech = "SELECT * FROM table WHERE code LIKE """ & Textcode.Text & "*"""

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

bonjour,
pour le contenu du rech en exécution sa marche pas Shift+F9 il se passe rien quand je les tape alors je te donne mon code pour vois si j ai fait une erreur en declaration de la base ou un truc du genre :

Dim session As Workspace
Dim base As Database
Dim enreg As Recordset


Private Sub Cmdrecherche_Click()

Dim rech As String

rech = "SELECT * FROM table WHERE code LIKE """ & Textcode.Text & "*"";"
Text2.Text = enreg![nom]
Text3.Text = enreg![prenom]

End Sub


Private Sub Form_Load()
Set session = DBEngine.Workspaces(0)
Set base = session.OpenDatabase(App.Path & "\saisie.mdb")
Set enreg = base.OpenRecordset("table")

End Sub

et j ai fait un teste pour voir ou il se pointe le premier et le dernier enregistrement, et j ai vu que le premier et le dernier enregistrement ne sont pas dans le même ordre quand j ouvre ma table.
alors j ai conclu que le bouton recherche ne marche pas du tout
et merci
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

Question : Où est utilisée rech ?
Nul part, donc ta requête n'est pas utilisée.
Seule la ligne
Set enreg = base.OpenRecordset("table")
Remplie enreg, donc le contenu de ta table.

Il faut faire un truc du genre :
set enreg=...(rech)

ensuite ça fonctionnera mieux, je pense.

Mon site
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

Bonjour,
j ai ajouté la ligne suivant comme tu ma dis :

Set enreg2 = base.OpenRecordset(rech)

Après l'exécution il me donne un débogage :
"le motueur de base de donnée Microsoft Jet ne peu pas trouver la table ou la requete source"

et merci pour t es réponse
Messages postés
14733
Date d'inscription
vendredi 14 mars 2003
Statut
Modérateur
Dernière intervention
12 octobre 2020
146
Bonjour,

C'est déjà mieux, il te dit qu'il ne trouve par la table que tu utilises dans ta requête, à toi de vérifier cela.

Mon site
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
Juste une chose pour être sur que vous ne touniez pas en rond (Si cela ce trouve ma question ne sert a rien mais bon). J'ai vu que tu utilise le "like" dand ta requète. Donc et tu sur de ne pas avoir plusieur valeurs de retour . Je m'explique. Si ton txtcode.Text vaut "10" et que dans ta tabe code a les valeurs "10", "810", "1110", etc... il est normale que ta req. te routroune le tout.

Donc il me semble(Si g raison dans mon analyse) qu'il faut juste que tu change ta req. comme celà
"SELECT * FROM table WHERE code = '" & txtcode.Text & "';".

Mais si ton champs code n'est pas du type texte et que j'ai raison sur mon analyse du premier paragraphe. Alor il faut que ta req. soit

"SELECT * FROM table WHERE code = " & cint(txtcode.Text) & ";".

Tien moi au courant et sorry si je me suis planté sur tout la ligne.
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

Bonsoir ,
merci pour vos repense
pour la ligne "Set enreg2 = base.OpenRecordset(rech)" c est la ou y a le problème il accepte pas "rech" car il n est pas déclaré comme recordeset je crois que c est pour sa il me met le débogage .
et pour la façon dont ecrire la ligne "SELECTE *....":
1) "SELECT * FROM table WHERE code = '" & txtcode.Text & "';"

il ne donne rien toujours le même problème il m affiche le même enregistrement, même si j écris n importe quel mot

2) "SELECT * FROM table WHERE code = " & cint(txtcode.Text) & ";"

après l exécution de la recherche, il met un débogage dont le message "Overflow" ( je crois que y a un problème avec le type du "txtcode.text"

et pour le type du champs "code" c est numérique

Et merci d avance
Messages postés
781
Date d'inscription
lundi 22 janvier 2007
Statut
Membre
Dernière intervention
30 octobre 2013
3
4 questions:
1) rech et bien un string ?
2) rech vaut-il "SELECT * FROM table WHERE code = " & txtcode.Text & ";" ?
3) Tu as un "Option Explicit" dans ton code ?
4) Tu n'as pas d'erreur sur la ligne "OpenDatabase(....." (tu as bien un OpenDatabase )?

Si ta réponse est oui dans les quatre cas je te conseils d'enlève le "Option Explicit" (C pas propre je sais mais comme ça en avance on pourra le remètre après) et tout devrais fonctionner.

Si ta réponse est non dans une ou plusieurs des questions que je t posé c que tu a brulé des étapes. Redis moi.

Tu as un overflow avec cint(txtcode.Text) j'ai des sérieux doute sur la valeur de ton champs. Il t'est INTERDIT de saisir de texte. Tape par exemple 100 ou 3000 etc mais des nombre plus petit que 2^16
Messages postés
14
Date d'inscription
mardi 30 mars 2010
Statut
Membre
Dernière intervention
24 février 2011

Bonjour,

Repense :
1)oui, rech est un string
2)oui dans mon code rech = "SELECTE * FROM ...."
3)nn, j'utilise pas "Option Explicit"
4)oui les relation entre la base de donnée et VB est bien réalisé (j ai même effectué un teste pour sa voir si sa marche )

Et pour se que tu as dis a propos de cint(...) oui mon code dépasse 2^16 (comme celui la 10013868)

et pour mon point de vue je crois que la ligne rech= " SELECTE * FROM..." , il s'exécute parfaitement le problème c est juste il faut reliée une liaison entre la ligne rech=... et le recordset