IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

VBA Access Discussion :

Champ pouvant désigner plusieurs tables & problèmes VBA


Sujet :

VBA Access

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Champ pouvant désigner plusieurs tables & problèmes VBA
    Bonsoir,

    Je suis débutante en VBA et sur ACCESS. Je découvre de nouvelles choses tous les jours

    Je ne sais pas si vous pouvez m'aider, mais cela fait tellement longtemps que je me prends la tête sur ce problème, que je me permets de demander de l'aide

    Je suis en train de faire un formulaire de recherche. Disons qu'il s'agit de retrouver des spécimens à partir d'une recherche basée sur le nom scientifique, vulgaire ou les informations de collecte.

    Le soucis, c'est qu'en faisant le code VBA sur le formulaire, je me rends bien compte qu'il y a un soucis avec mon champ "num_inventaire" qui se retrouve dans plusieurs de mes tables. Et ACCESS aussi l'a bien remarqué!

    J'ai essayé plusieurs solutions, notamment de spécifier le nom de la table, mais rien n'y fait J'ai toujours ce problème, et le message d'erreur "le champ spécifié peut désigner plusieurs tables ..."

    Je ne sais pas si vous pouvez m'aider qu'avec le code ? Le voici:


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    Private Sub RefreshQuery()
    Dim SQL As String
    Dim SQLWhere As String
     
    Me.Refresh
    Me.Repaint
     
    SQL = "SELECT num_inventaire AS 'Numéro inventaire', sexe AS 'Sexe', age AS 'Age', libelle_age AS 'Statut', nom_vulgaire AS 'Nom vulgaire', nom_scientifique as 'Nom scientifique' FROM Table_espece e, Table_collection s, Table_collecte c WHERE s!num_inventaire <> 0 AND e!code_espece=s!code_espece AND c!num_inventaire=s!num_inventaire "
     
    If Not Me.txtnom = "" Then
        SQL = SQL & "AND (e!nom_vulgaire LIKE '*" & Me.txtnom & "*' OR e!nom_scientifique LIKE '*" & Me.txtnom & "*') "
    End If
    If Not Me.txtdatec = "" Then
        SQL = SQL & "AND c!date = #" & Me.txtdatec & "# "
    End If
    If Not Me.txtcommunec = "" Then
        SQL = SQL & "AND c!commune LIKE '*" & Me.txtcommunec & "*' "
    End If
    If Not Me.txtregionc = "" Then
        SQL = SQL & "AND c!region LIKE '*" & Me.txtregionc & "*' "
    End If
     If Not Me.txtdepc = "" Then
        SQL = SQL & "AND c!departement LIKE '*" & Me.txtdepc & "*' "
    End If
    If Not Me.txtpaysc = "" Then
        SQL = SQL & "AND c!pays LIKE '*" & Me.txtpaysc & "*' "
    End If
     
    SQL = SQL & ";"
     
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub btnRechercher_MouseUp(Button As Integer, Shift As Integer, X As Single, Y As Single)
     
    RefreshQuery
     
    End Sub

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub lstResults_DblClick(Cancel As Integer)
     
    DoCmd.OpenForm "Formulaire_info_globale_specimens", acNormal, , num_inventaire = " & Me.lstResults
     
    End Sub

    Désolé, je ne trouve pas comment faire pour rendre çà plus jolie

    Si vous avez besoin d'autres choses ou trouvez une solution, merci de la faire partager

    Bonne soirée!

  2. #2
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    bonsoir et bienvenue,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL = "SELECT num_inventaire AS 'Numéro inventaire', ...
    dans le SELECT, il faut aussi que tu préfixes num_inventaire avec le nom de la table, c.à.d s.num_inventaire.

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bonsoir,

    Merci de votre réponse!

    J'avais déjà essayé cette solution, mais ACCESS me répète la même erreur!

    Je me demandais si ce n'était pas à cause de la dernière ligne (lorsque je double clique sur un enregistrement):

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Private Sub lstResults_DblClick(Cancel As Integer)
     
    DoCmd.OpenForm "Formulaire_info_globale_specimens", acNormal, , "[num_inventaire] = " & Me.lstResults
     
    End Sub
    J'ai essayé le s.num_inventaire, mais ACCESS me renvoi un message d'erreur :/

  4. #4
    Expert confirmé
    Avatar de vodiem
    Homme Profil pro
    Vivre
    Inscrit en
    Avril 2006
    Messages
    2 895
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Vivre
    Secteur : Conseil

    Informations forums :
    Inscription : Avril 2006
    Messages : 2 895
    Points : 4 325
    Points
    4 325
    Par défaut
    Salut f-leb et bienvenue chokella,

    après la recommandation de f-leb il serait bien aussi de mettre des crochets plutôt que des apostrophes pour le nom des champs et faire des jointures au table plutot que d'utiliser le where.
    tu peux utiliser l’éditeur graphique de requête pour obtenir le résultat souhaité puis récupérer son sql en changeant de vue et ainsi remplacer ta variable SQL par celui généré. ce sera une bonne base de départ.
    autrement après un .RowSource il n'y a pas besoin de requery, ainsi que les refresh, paint qui n'ont pas d'effet à ce niveau là.


  5. #5
    Responsable Arduino et Systèmes Embarqués


    Avatar de f-leb
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2009
    Messages
    12 620
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Sarthe (Pays de la Loire)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : Janvier 2009
    Messages : 12 620
    Points : 56 857
    Points
    56 857
    Billets dans le blog
    40
    Par défaut
    sur quelle ligne du programme est déclenchée le message d'erreur ?

    sinon dans ton programme, rajoutes la ligne:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    ...
    SQL = SQL & ";"
    
    debug.print SQL
    
    Me.lstResults.RowSource = SQL
    Me.lstResults.Requery
    puis poste ici la chaîne retournée dans la console d'exécution. On verra bien si le code SQL a une bonne tête.

    [edit] salut Vodiem ! [/edit]

  6. #6
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Re!

    J'ai essayé en passant par une requête, j'obtiens ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SELECT s.num_inventaire AS ['Num inventaire'], s.sexe AS ['Sexe'], s.age AS ['Age'], s.libelle_age AS ['Statut'], e.nom_vulgaire AS ['Nom vulgaire'], e.nom_scientifique AS ['Nom scientifique'], [s]![num_inventaire] AS Expr1, [e]![code_espece] AS Expr2, [c]![num_inventaire] AS Expr3
    FROM Table_espece AS e, Table_collection AS s, Table_collecte AS c
    WHERE ((([s]![num_inventaire])<>0) AND (([e]![code_espece])=[s]![code_espece]) AND (([c]![num_inventaire])=[s]![num_inventaire]));
    Mais en le remplaçant dans le code vba, il me dit qu'il y a des erreurs...

    Pourtant la requête fonctionne bien

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Février 2013
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2013
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    C'est bon cela fonctionne maintenant

    Fallait juste que je me réveille un peu

    J'avais oublié de remettre le SQL =, cela ne pouvait pas marcher

    Je vous remercie beaucoup!!!

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 12
    Dernier message: 21/01/2014, 20h35
  2. [AC-2000] Champ spécifié peut désigner plusieurs tables
    Par jclm230759 dans le forum Requêtes et SQL.
    Réponses: 2
    Dernier message: 23/01/2013, 16h12
  3. Réponses: 1
    Dernier message: 15/04/2010, 08h10
  4. [ODBC] Le champ spécifié peut désigner plusieurs tables et pourtant
    Par nawak.seb dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 05/11/2008, 09h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo