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
Bonjour à tous,
J'ai devant moi une Interface graphique Visual Basic.
J'ai une base de donnée où sont mémorisés par catégories les détails sur les éléments précis

Comment chercher un élément donné (d'une colonne) dans une base de donnée (Access) et afficher le contenu de toute la ligne.

Par exemple, dans une colonne, se trouve le nom Eric Cantona.
La ligne Eric Cantona contient , entre autres age, salaire, situation familiale, profession..etc. Je voudrais donc pouvoir d'abord en cliquant sur le bouton de mon Interface VB,
1- Rechercher le nom "Eric Cantona" que j'ai entré au clavier dans la base de donnée . Si trouvé , alors, j' afficher toute la ligne d'information correspondant à ce nom.

J'attend impatiement la réponse d'un volontaire.

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
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
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
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?


ö,ö
\_/
0
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.
0
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
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

ö,ö
\_/
0
Pas de probleme
Je connais l'Allemand. Je comprend et je parle Allemand. J'ai étudié en Allemagne. Donc fais gaffe !

Je vais essayer de me débrouiller . J'espère que ton HP trouver la réponse à mon prbleme
0
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
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?

ö,ö
\_/
0
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
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
0
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
0
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
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...
0

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
Set DB = Me.CurrentDB?

ö,ö
\_/
0
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
Tiens moi au courant...
0
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
0
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
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
0