VBA: chercher un element dans access
Fermé
Malex
-
7 août 2002 à 11:01
mouse Messages postés 136 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 13 avril 2007 - 8 août 2002 à 15:20
mouse Messages postés 136 Date d'inscription mercredi 4 avril 2001 Statut Membre Dernière intervention 13 avril 2007 - 8 août 2002 à 15:20
A voir également:
- VBA: chercher un element dans access
- Vba récupérer valeur cellule ✓ - Forum VB / VBA
- Mkdir vba ✓ - Forum VB / VBA
- Excel compter cellule couleur sans vba - Guide
- Vba range avec variable ✓ - Forum VB / VBA
- Vba dépassement de capacité ✓ - Forum Excel
7 réponses
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
7 août 2002 à 11:12
7 août 2002 à 11:12
Salut Malex...
1/J'ai deplace en programmation, c'est plus sa place
2/Tu peux ecrire une requete (SELECT * FROM matable WHERE nom="EricCantonna";)
3/Ou alors, tu joues avec les filtres...j'ai pas compris exactement ce que tu veux faire en fait, tu veux afficher les infos concernant quelque'un, mais ou tu selectionnes ce quelqu'un?
ö,ö
\_/
1/J'ai deplace en programmation, c'est plus sa place
2/Tu peux ecrire une requete (SELECT * FROM matable WHERE nom="EricCantonna";)
3/Ou alors, tu joues avec les filtres...j'ai pas compris exactement ce que tu veux faire en fait, tu veux afficher les infos concernant quelque'un, mais ou tu selectionnes ce quelqu'un?
ö,ö
\_/
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
7 août 2002 à 11:25
7 août 2002 à 11:25
C'est une maladie aujourd'hui de poster en double ou quoi! Ca sert a quoi de faire ca, a part a agace tout le monde, a m'obliger a en modere un (les 2 la prochaine fois...) et a polluer le forum en virant des messages de la premiere page...hein?
ö,ö
\_/
ö,ö
\_/
Oui Mr. Teebo, j'ai pas voulu afficher en double. La première fois je me suis trompé de Forum, et je me suis rangé alors.
En fait pour la question. J'ai programmé un Menu Tree ( Style Windows Explorer ). Et cela doit se comporter comme suit:
Set nodX = treeviewGeVo.Nodes.Add(, , "Group1", "Sportif", "FolderOpen") 'Group Sportif
Set nodX = treeviewGeVo.Nodes.Add(1, tvwChild, , "Footballeur", "FolderClose") 'Group Footballeur
Set nodX = treeviewGeVo.Nodes.Add(2, tvwChild, , "France", "FolderClose") ' Group Francais
Set nodX = treeviewGeVo.Nodes.Add(3, tvwChild, , "Eric Cantona", "LeafRead") ' Liste des joueurs. Et liens. Onclick = Action
Lorsque le Menu Tree est complètement déballé, on peut selectionner le joueur.
Le nom du joueur selectionné est transmis sera recherché dans la base de donnée puis transmis à une variable pour affichage.
Voici par exemple comment les infos sont alignés dans Access
--------------------------------------------------------------------------
Eric Cantona | 34 ans | Marié | Retraité | ...
---------------------------------------------------------------------------
Didier Deschamps | 32 ans |Célibataire | Retraité | ...
----------------------------------------------------------------------
..
..
etc
Si le joueur est trouvé, dans la base de donnée, alors il affiche toute la ligne d'infos sur ce joueurs.
Dans le cas de Cantona, il affichera donc: 34 ans , marié , retraité.
C'est un peu compliquer d'expliquer comme cela je sais mais, je fais des efforts.
En fait pour la question. J'ai programmé un Menu Tree ( Style Windows Explorer ). Et cela doit se comporter comme suit:
Set nodX = treeviewGeVo.Nodes.Add(, , "Group1", "Sportif", "FolderOpen") 'Group Sportif
Set nodX = treeviewGeVo.Nodes.Add(1, tvwChild, , "Footballeur", "FolderClose") 'Group Footballeur
Set nodX = treeviewGeVo.Nodes.Add(2, tvwChild, , "France", "FolderClose") ' Group Francais
Set nodX = treeviewGeVo.Nodes.Add(3, tvwChild, , "Eric Cantona", "LeafRead") ' Liste des joueurs. Et liens. Onclick = Action
Lorsque le Menu Tree est complètement déballé, on peut selectionner le joueur.
Le nom du joueur selectionné est transmis sera recherché dans la base de donnée puis transmis à une variable pour affichage.
Voici par exemple comment les infos sont alignés dans Access
--------------------------------------------------------------------------
Eric Cantona | 34 ans | Marié | Retraité | ...
---------------------------------------------------------------------------
Didier Deschamps | 32 ans |Célibataire | Retraité | ...
----------------------------------------------------------------------
..
..
etc
Si le joueur est trouvé, dans la base de donnée, alors il affiche toute la ligne d'infos sur ce joueurs.
Dans le cas de Cantona, il affichera donc: 34 ans , marié , retraité.
C'est un peu compliquer d'expliquer comme cela je sais mais, je fais des efforts.
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
7 août 2002 à 12:03
7 août 2002 à 12:03
Bon, d'accord, ca va...mais a la longue, ca devient lourd...aller pour me faire pardonner, voila te quoi repondre a ta question :
http://www.self-access.com/access/index.html
comme j'ai pas le temps de te donner des details maintenant (surtout que mon Access est en allemand :-S) j'espere que tu y trouveras ton bohneur
ö,ö
\_/
http://www.self-access.com/access/index.html
comme j'ai pas le temps de te donner des details maintenant (surtout que mon Access est en allemand :-S) j'espere que tu y trouveras ton bohneur
ö,ö
\_/
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
7 août 2002 à 12:16
7 août 2002 à 12:16
Moi, limite...je commence a me debrouiller, mais comme a part office, j'ai reussi a negocier un envirronement anglais, le technique en allemand passe pas...
HP?
ö,ö
\_/
HP?
ö,ö
\_/
mouse
Messages postés
136
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
13 avril 2007
10
7 août 2002 à 13:03
7 août 2002 à 13:03
Tu peux aussi essayer en VB...
En fait dans les propriété de ta table, il faut ajouter un index sur le champs nom, tu le nommes par exemple "recherche_nom"
Ensuite tu ecris
Dim Db as Database, Re as recordset
Set Db=CurrentDb
Set Re=de.openrecordset("matable", dbopensnapshot)
Re.Index="recherche_nom"
re.seek "=", "ce que tu recherche dans le champ, par ex Eric Cantona"
if re.nomatch then
'cas ou la valeur n'est pas trouvée
else
' si la valeur est trouvé, alors re contient toutes tes données
' si age est le nom du champs qui contient les ages, alors "re!age" est egale a son age...
end if
Bonne chance
En fait dans les propriété de ta table, il faut ajouter un index sur le champs nom, tu le nommes par exemple "recherche_nom"
Ensuite tu ecris
Dim Db as Database, Re as recordset
Set Db=CurrentDb
Set Re=de.openrecordset("matable", dbopensnapshot)
Re.Index="recherche_nom"
re.seek "=", "ce que tu recherche dans le champ, par ex Eric Cantona"
if re.nomatch then
'cas ou la valeur n'est pas trouvée
else
' si la valeur est trouvé, alors re contient toutes tes données
' si age est le nom du champs qui contient les ages, alors "re!age" est egale a son age...
end if
Bonne chance
Salut Mouse et merci pour ton code. Malheureusement,j'ai l'imprion qu'il ya qqchose qui ne marche toujours pas.
La première erreur lors de la compilation pointe sur
set Db = CurrentDb
Description: Runtime Error, Object Required
Si je met setDb = currentDb en commentaire, l'erreur pointe maintenant sur
Set Re = Db.OpenRecordset("test", dbOpenSnapshot)
Description: Object variable or with block variable not set
Voici le code complet
Dim Db As Database
Dim Re As Recordset
Data1.DatabaseName = App.Path & "\test.mdb"
Set Db = CurrentDb
Set Re = Db.OpenRecordset("test", dbOpenSnapshot)
bsName.Caption = treeviewGeVo.SelectedItem.Text
Do Until Re.EOF
Re.Index = "recherche_nom"
Re.Seek "=", bsName.Caption
If Re.NoMatch Then
Re.MoveNext
'cas ou la valeur n'est pas trouvée
Else
MsgBox "C'est bon"
' si la valeur est trouvé, alors re contient toutes tes données
' si age est le nom du champs qui contient les ages, alors "re!age" est egale a son age...
Re.Close
End If
Loop
Db.Close
La première erreur lors de la compilation pointe sur
set Db = CurrentDb
Description: Runtime Error, Object Required
Si je met setDb = currentDb en commentaire, l'erreur pointe maintenant sur
Set Re = Db.OpenRecordset("test", dbOpenSnapshot)
Description: Object variable or with block variable not set
Voici le code complet
Dim Db As Database
Dim Re As Recordset
Data1.DatabaseName = App.Path & "\test.mdb"
Set Db = CurrentDb
Set Re = Db.OpenRecordset("test", dbOpenSnapshot)
bsName.Caption = treeviewGeVo.SelectedItem.Text
Do Until Re.EOF
Re.Index = "recherche_nom"
Re.Seek "=", bsName.Caption
If Re.NoMatch Then
Re.MoveNext
'cas ou la valeur n'est pas trouvée
Else
MsgBox "C'est bon"
' si la valeur est trouvé, alors re contient toutes tes données
' si age est le nom du champs qui contient les ages, alors "re!age" est egale a son age...
Re.Close
End If
Loop
Db.Close
mouse
Messages postés
136
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
13 avril 2007
10
>
Malex
7 août 2002 à 16:26
7 août 2002 à 16:26
En écrivant set Db = CurrentDb , tu dis que l'objet Db est la base de données qui contiens les tables que tu dois traiter.
En fait je savais pas que tu bossais a partir de VB. Donc du coup ecris :
Set db=opendatabase("le path pour trouver ta base de données")
Autre chose, en utilisant la commande Seek, tu ne dois pas te ballader dans l'objet Recordset comme tu le fait la
do until re.EOF
re.movenext
loop
Lorsque tu met un index sur un champ, et que tu utilise la fonction seek, le "pointeur" pointe directement sur la bonne ligne.
Un fois avoir fait seek, soit il l'a trouvé, soit il l'a pas trouvé, mais il ne faut pas parcourir l'ensemble de l'objet recordset.
J'espere que ca va t'aider...
En fait je savais pas que tu bossais a partir de VB. Donc du coup ecris :
Set db=opendatabase("le path pour trouver ta base de données")
Autre chose, en utilisant la commande Seek, tu ne dois pas te ballader dans l'objet Recordset comme tu le fait la
do until re.EOF
re.movenext
loop
Lorsque tu met un index sur un champ, et que tu utilise la fonction seek, le "pointeur" pointe directement sur la bonne ligne.
Un fois avoir fait seek, soit il l'a trouvé, soit il l'a pas trouvé, mais il ne faut pas parcourir l'ensemble de l'objet recordset.
J'espere que ca va t'aider...
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
teebo
Messages postés
33491
Date d'inscription
jeudi 14 octobre 2004
Statut
Modérateur
Dernière intervention
24 février 2011
1 793
7 août 2002 à 14:36
7 août 2002 à 14:36
Set DB = Me.CurrentDB?
ö,ö
\_/
ö,ö
\_/
mouse
Messages postés
136
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
13 avril 2007
10
7 août 2002 à 16:26
7 août 2002 à 16:26
Tiens moi au courant...
Salut Mouse
'OPeration is not supported for this type of Object'
C'est le message d'erreur que je recois maintenant.
Il y aurait un problème avec
Re.Index resp.
Re.Seek (Voir code ci-dessus)
Est ce que tu epux essayer de compiler toi même et constater la même chose que moi. Tu sais VB c'est pas mon affaire à proprement parler
'OPeration is not supported for this type of Object'
C'est le message d'erreur que je recois maintenant.
Il y aurait un problème avec
Re.Index resp.
Re.Seek (Voir code ci-dessus)
Est ce que tu epux essayer de compiler toi même et constater la même chose que moi. Tu sais VB c'est pas mon affaire à proprement parler
mouse
Messages postés
136
Date d'inscription
mercredi 4 avril 2001
Statut
Membre
Dernière intervention
13 avril 2007
10
8 août 2002 à 15:20
8 août 2002 à 15:20
Salut, désolé de répondre si tard...
en fait moi je travaille a chauqe fois d'Access, et je n'ai pas VB, donc je peux pas le tester.
As-tu fais la modif que je t'ai dit plus haut ? (Set db=opendatabase("le path pour trouver ta base de données") )
Si tu l'a fait et que cela ne marche pas, alors je suis désolé, mais je peux pas t'aider plus.
esaiie peut etre ce que t'a dit Teebo, a savoir
Dim Db as Database, Re as recordset
Dim SQL as string
set db=opendatabase("le path pour trouver ta base de données")
SQL="SELECT * FROM matable WHERE nom='" & recherche_nom & " ';"
set re=db.openrecodset(SQL)
if not re.nomatch then
re.movefirst
'ecris ce que tu dois faire
end if
en fait moi je travaille a chauqe fois d'Access, et je n'ai pas VB, donc je peux pas le tester.
As-tu fais la modif que je t'ai dit plus haut ? (Set db=opendatabase("le path pour trouver ta base de données") )
Si tu l'a fait et que cela ne marche pas, alors je suis désolé, mais je peux pas t'aider plus.
esaiie peut etre ce que t'a dit Teebo, a savoir
Dim Db as Database, Re as recordset
Dim SQL as string
set db=opendatabase("le path pour trouver ta base de données")
SQL="SELECT * FROM matable WHERE nom='" & recherche_nom & " ';"
set re=db.openrecodset(SQL)
if not re.nomatch then
re.movefirst
'ecris ce que tu dois faire
end if