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 :

Le champ peut désigner plusieurs tables listées dans votre instruction SQL. [AC-2007]


Sujet :

VBA Access

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Par défaut Le champ peut désigner plusieurs tables listées dans votre instruction SQL.
    Bonjour.
    J'ai réalisé, pour une école, un logiciel de facturation en access, et je voudrais envoyer les factures par e-mail.
    Chaque facture est un état (E_FACTURES_MATRIC), à générer et à ouvrir pour chaque élève de l'établissement, identifié par un matricule.

    Voici le code envisagé :

    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
    Dim stDocName as String
    Dim stDocNamedeux As String
    Dim stDocNametrois As String
    Dim rst as recordset
    Dim Identifiant as Integer
    Dim adresp as String
    Dim stCondition As String
    Dim message As String
     
    stDocName="E_FACTURES_MATRIC"
    stDocNamedeux="Rich Text Format"
    stDocNametrois="Note de frais scolaires"
    message="Veuillez trouver en pièce jointe etc."
     
    Set rst=CurrentDb.OpenRecordset("Select matriculei,mailr from T_MAIL")
    rst.MoveFirst
    Do Until rst.EOF
    Identifiant=rst!matriculei
    adresp=rst!mailr
    stCondition="[R_CALCUL_DES_MONTANTS_MATRIC].[MATRICINFO]=" & str(Identifiant)
    DoCmd.OpenReport "E_FACTURES_MATRIC", acVieuwNormal,,"[R_CALCUL_DES_MONTANTS_MATRIC].[MATRICINFO]" &"="& str(Identifiant)
    DoCmd.SendObject acReport, stDocName, stDocNamedeux,adresp,,,stDocNametrois,message
    DoCmd.Close acReport,stDocName 
    rst.MoveNext
    Loop
    rst.Close
    Set rst=Nothing
    Le programme m'indique : "Le champ [R_CALCUL_DES_MONTANTS_MATRIC].[MATRICINFO] peut désigner plusieurs tables listées dans la clause FROM de votre instruction SQL".

    Comment faire pour ne plus avoir ce message ?

    Voici la requête R_CALCUL_DES_MONTANTS_MATRIC :

    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_COMMANDES.ACHETEUR_ID AS MATRICINFO,T_ELEVES.NOMDELELEV,T_ELEVES.PRENOMDELE,T_FRAIS.FR_ID,T_COMMANDES.QTE, T_FRAIS.FR_LIBEL, SUM (T_COMMANDES!QTE*T_FRAIS!PU) AS MONTANT
    FROM T_FRAIS INNER JOIN (T_ELEVES INNER JOIN T_COMMANDES ON T_ELEVES.MATRICULEI=T_COMMANDES.ACHETEUR_ID) ON T_FRAIS.FR_ID=T_COMMANDES.ARTICLE_ID
    GROUP BY T_COMMANDES.ACHETEUR_ID, T_ELEVES.NOMDELELEV, T_ELEVES.PRENOMDELE,T_FRAIS.FR_ID,T_COMMANDES.QTE,T_FRAIS.FR_LIBEL,T_ELEVES.ANNEE,T_ELEVES.CLASSE
    HAVING T_COMMANDES.ACHETEUR_ID=Identifiant;

  2. #2
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    mmljg,

    bonjour

    Le message semble être assez explicite :

    Le programme m'indique : "Le champ [R_CALCUL_DES_MONTANTS_MATRIC].[MATRICINFO] peut désigner plusieurs tables listées dans la clause FROM de votre instruction SQL".
    Donc pour résoudre ton problème il est probable que dans le join ou le from de ta requête le champ MATRICINFO issu de la table R_CALCUL_DES_MONTANTS_MATRIC soit inscrit 2 fois. Tu peux utiliser un alias pour faire apparaître deux champs issus de la même table dans le résultat de ta requête.

    Ce champ est donc inscrit dans ta table ou requête T_Commandes et ta table ou requête T_FRAIS.

    Tu peux t'aider de l'assistant création Requête afin de corriger ton erreur (passe en mode SQL et modifie ton critère Identifiant par un ID présent dans ta table (ou requête) T_Commandes.

    Autre piste n'aurais tu pas dans ta table T_FRAIS et T_Commandes le même nom de champ ?

    JimBoLion

  3. #3
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Par défaut Réponse un.
    Grand merci pour votre réponse et l'intérêt porté à mon problème.

    Malheureusement, je ne pense pas qu'elle m'apporte la solution.

    En effet, "MATRICINFO" est déjà un alias, que j'avais créé dans l'espoir précisément de contourner le problème : "Le champ ... peut désigner plusieurs tables listées dans la clause from de votre instruction SQL".

    Quant aux tables T_COMMANDES et T_FRAIS, leurs noms de champs sont bien différents : ACHETEUR_ID et ARTICLE_ID pour T_COMMANDES, FR_ID, FR_LIBEL, FR_PU pour T_FRAIS.

    Par contre, T_COMMANDES.ACHETEUR_ID et T_ELEVES.MATRICULEI désignent bien, sous deux appellations différentes, l'identifiant de chaque élève.

    D'avance un grand merci si vous pouvez m'aider.

  4. #4
    Expert confirmé
    Avatar de jimbolion
    Homme Profil pro
    Moulticien
    Inscrit en
    Janvier 2013
    Messages
    3 150
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Var (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Moulticien
    Secteur : Santé

    Informations forums :
    Inscription : Janvier 2013
    Messages : 3 150
    Billets dans le blog
    2
    Par défaut
    mmljg,


    Que se passe t-il lorsque tu copie ta requête dans l'assistant création ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    SELECT T_COMMANDES.ACHETEUR_ID AS MATRICINFO,T_ELEVES.NOMDELELEV,T_ELEVES.PRENOMDELE,T_FRAIS.FR_ID,T_COMMANDES.QTE, T_FRAIS.FR_LIBEL, SUM (T_COMMANDES!QTE*T_FRAIS!PU) AS MONTANT
    FROM T_FRAIS INNER JOIN (T_ELEVES INNER JOIN T_COMMANDES ON T_ELEVES.MATRICULEI=T_COMMANDES.ACHETEUR_ID) ON T_FRAIS.FR_ID=T_COMMANDES.ARTICLE_ID
    GROUP BY T_COMMANDES.ACHETEUR_ID, T_ELEVES.NOMDELELEV, T_ELEVES.PRENOMDELE,T_FRAIS.FR_ID,T_COMMANDES.QTE,T_FRAIS.FR_LIBEL,T_ELEVES.ANNEE,T_ELEVES.CLASSE
    HAVING T_COMMANDES.ACHETEUR_ID='1';
    jimbolion

  5. #5
    Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    Janvier 2014
    Messages
    6
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Janvier 2014
    Messages : 6
    Par défaut Réponse 2.
    Bonjour, et grand merci pour votre suivi.

    J'ai reconstruit ma requête en mode création, et cette fois sans alias, sans problème; j'ai ouvert l'état directement (sans passer par la procédure en VBA), sans problème; mais en appliquant la procédure imaginée en VBA, j'ai à nouveau le même message.

    Cela étant, l'état appelle une deuxième requête SQL, ainsi rédigée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT R_CALCUL_DES_MONTANTS_MATRIC.ACHETEUR_ID
    ,R_CALCUL_DES_MONTANTS_MATRIC.NOMDELELEV
    ,R_CALCUL_DES_MONTANTS_MATRIC.PRENOMDELE
    ,Sum (R_CALCUL_DES_MONTANTS_MATRIC.MONTANT) AS TOTA 
    FROM R_CALCUL_DES_MONTANTS_MATRIC 
    GROUP BY R_CALCUL_DES_MONTANTS_MATRIC;





    Le problème viendrait-il du fait que deux requêtes nécessaires pour le même état appelle le même nom de champ ? Si oui, quelle est la parade ?

    Encore un grand merci pour votre/ton aide.

  6. #6
    Expert éminent

    Avatar de Tofalu
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Octobre 2004
    Messages
    9 501
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 42
    Localisation : France, Ain (Rhône Alpes)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Associations - ONG

    Informations forums :
    Inscription : Octobre 2004
    Messages : 9 501
    Par défaut
    La clause GROUP BY de votre dernière requête est fausse. Tous les champs de la clause SELECT qui ne figurent pas dans les fonctions d’agrégations doivent figurer dans la clause GROUP BY

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

Discussions similaires

  1. [AC-2010] Le champ spécifié [machin] peut désigner plusieurs tables listées dans une clause FROM
    Par Athena Asamiya dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 26/08/2013, 14h08
  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