VBA: chercher un element dans access

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

  • Votes
  • Date
  • Date décroissante
  1. Contributeur
    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. Contributeur
      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?

      ö,ö
      \_/
      1. 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.
    2. Contributeur
      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

      ö,ö
      \_/
      1. 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
      2. Contributeur
        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?

        ö,ö
        \_/
    3. 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
      1. 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
      2. @MalexEn é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...
    4. Tiens moi au courant...
      1. 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
    5. 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