VBA: chercher un element dans access

Malex -  
mouse Messages postés 136 Statut Membre -
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

  1. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    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
  2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    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
    1. Malex
       
      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
  3. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    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
    1. Malex
       
      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
    2. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
       
      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
  4. mouse Messages postés 136 Statut Membre 10
     
    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
    1. Malex
       
      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
      1. mouse Messages postés 136 Statut Membre 10 > Malex
         
        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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. teebo Messages postés 33585 Date d'inscription   Statut Contributeur Dernière intervention   1 797
     
    Set DB = Me.CurrentDB?

    ö,ö
    \_/
    0
  7. mouse Messages postés 136 Statut Membre 10
     
    Tiens moi au courant...
    0
    1. malex
       
      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
  8. mouse Messages postés 136 Statut Membre 10
     
    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