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

Bases de données Delphi Discussion :

Requête SQL en Delphi 7 pour access


Sujet :

Bases de données Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 28
    Par défaut Requête SQL en Delphi 7 pour access
    Bonjour
    J'espère être dans le bon forum, mon problème:
    ma requête:
    Code sql : 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
    Select Entfctclient.Commercial,Entfctclient.Client,Produit.Grdfamille,Produit.Famille,max(Produit.Famille) as pdfam,max(Famarticle.Libelle) as libfab,
     max(Commerciaux.Nom) as Nomco, sum(Ligfctclient.qtefac*Ligfctclient.cdtcarton) as qteli, sum(Ligfctclient.mtligne) as mtht,
    max(Clients.Nom) as Nomcli,max(Clients.Txcom) as Txcoms,sum(Ligfctclient.Qtefac*Remisecarton.Recar_Prime) as Prime,MIN(Txcom_Commercial.Txcom) as Txco,
    sum(Ligfctclient.Pxrevient) as mtrev, sum(Ligfctclient.mtligne-Ligfctclient.Pxrevient) as marge,
    min(Famarticle.taux) as tx1 , min(Famarticle.Tauxmarge) as Txmar,
    (IIF(Tx1 > Txcoms,Tx1=Txcoms,Tx1))as Tx,
    (IIF(Txmar is NULL or Txmar = 0.00 ,marge,mtht-((mtht * txmar) / 100))) as pourct,
    ((pourct * tx)/ 100 ) as mtcom
    FROM
    ((((((Ligfctclient INNER JOIN Entfctclient ON Ligfctclient.Nufct = Entfctclient.Nufct)
     LEFT JOIN Produit ON Produit.Nuart = Ligfctclient.Reference)
     INNER JOIN Commerciaux ON Commerciaux.Code = Entfctclient.Commercial)
     LEFT JOIN Famarticle ON (Famarticle.Gfam = Produit.Grdfamille) AND (Famarticle.Code = Produit.Famille))
     INNER JOIN Clients ON Clients.Code = Entfctclient.Client)
     INNER JOIN Remisecarton ON Remisecarton.Nuart = Ligfctclient.Reference)
     LEFT JOIN Txcom_Commercial ON (Txcom_Commercial.Commercial = Commerciaux.Code)  AND  (Txcom_Commercial.Gfam = Produit.Grdfamille)  AND  (Txcom_Commercial.Famille = Produit.Famille)
     
     GROUP BY Entfctclient.Commercial,Entfctclient.Client,Produit.Grdfamille,Produit.Famille
      ORDER by Entfctclient.Commercial,Entfctclient.Client,Produit.Grdfamille,Produit.Famille
    j'ai l'erreur suivante :
    Expression de jointure non supportée
    C'est du à la ligne :
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    LEFT JOIN Txcom_Commercial ON (Txcom_Commercial.Commercial = Commerciaux.Code)  AND  (Txcom_Commercial.Gfam = Produit.Grdfamille)  AND  (Txcom_Commercial.Famille = Produit.Famille)
    Sans cette ligne la requête est bonne (si on enleve : MIN(Txcom_Commercial.Txcom) as Txco,). Je ne pige pas pourquoi
    Si vous avez une idée
    merci
    A+

  2. #2
    Membre Expert

    Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Août 2002
    Messages
    1 296
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Août 2002
    Messages : 1 296
    Par défaut
    Les parenthèses entre FROM et Ligfctclient sont inutiles non? (je ne sais pas si ça a une influence, mais ce n'est pas lisible)

  3. #3
    Expert confirmé
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Par défaut
    Salut

    Comme dit Linkin, ta requête est difficilement lisible.

    J'ai donc fait le "tri" en incluant des alias pour les tables et, comme le précise linkin, supprimé les parenthèses inutiles.

    Voir les remarques dans le code:
    Code sql : 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
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    SELECT
      EC.COMMERCIAL,
      EC.CLIENT,
      P.GRDFAMILLE,
      P.FAMILLE,
    --  MAX(P.FAMILLE) AS PDFAM,          -- Inutile P.FAMILLE dans le GROUP BY
      /*MAX(*/FA.LIBELLE/*)*/ AS LIBFAB,  -- Aggregat inutile également (cf. jointure)
      /*MAX(*/CO.NOM/*)*/ AS NOMCO,       -- Le dernier commercial dans l'ordre alphabétique ????
      SUM(LC.QTEFAC * LC.CDTCARTON) AS QTELI,
      SUM(LC.MTLIGNE) AS MTHT,
      /*MAX(*/CL.NOM/*)*/ AS NOMCLI,      -- Même remarque que pour le commercial !
      MAX(CL.TXCOM) AS TXCOMS,
      SUM(LC.QTEFAC * RC.RECAR_PRIME) AS PRIME,
      MIN(TC.TXCOM) AS TXCO,
      SUM(LC.PXREVIENT) AS MTREV,
      SUM(LC.MTLIGNE - LC.PXREVIENT) AS MARGE,
      MIN(FA.TAUX) AS TX1,
      MIN(FA.TAUXMARGE) AS TXMAR,
      IIF(TX1 > TXCOMS, TX1 = TXCOMS, TX1) AS TX,
      IIF(TXMAR IS NULL OR TXMAR = 0.00, MARGE, MTHT - ((MTHT * TXMAR) / 100)) AS POURCT,
      (POURCT * TX) / 100 AS MTCOM
    FROM
      LIGFCTCLIENT AS LC
      INNER JOIN ENTFCTCLIENT AS EC
        ON LC.NUFCT = EC.NUFCT
      LEFT JOIN PRODUIT AS P
        ON P.NUART = LC.REFERENCE
      INNER JOIN COMMERCIAUX AS CO
        ON CO.CODE = EC.COMMERCIAL
      LEFT JOIN FAMARTICLE AS FA
        ON FA.GFAM = P.GRDFAMILLE
        AND FA.CODE = P.FAMILLE
      INNER JOIN CLIENTS AS CL
        ON CL.CODE = EC.CLIENT
      INNER JOIN REMISECARTON AS RC
        ON RC.NUART = LC.REFERENCE
      LEFT JOIN TXCOM_COMMERCIAL AS TC
        ON TC.COMMERCIAL = CO.CODE
        AND TC.GFAM = P.GRDFAMILLE
        AND TC.FAMILLE = P.FAMILLE
    GROUP BY
      EC.COMMERCIAL,
      EC.CLIENT,
      P.GRDFAMILLE,
      P.FAMILLE,
    -- ajout
      FA.LIBELLE,
      CO.NOM,
      CL.NOM;
    /*
    ORDER BY
      EC.COMMERCIAL,
      EC.CLIENT,
      P.GRDFAMILLE,
      P.FAMILLE; -- Inutile si identique au Group by
    */

    Concernant la jointure:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
      LEFT JOIN TXCOM_COMMERCIAL AS TC
        ON TC.COMMERCIAL = CO.CODE
        AND TC.GFAM = P.GRDFAMILLE
        AND TC.FAMILLE = P.FAMILLE
    Est-ce que les champs en relation sont du même type ?

    @+ Claudius.

  4. #4
    Membre averti
    Profil pro
    Inscrit en
    Février 2011
    Messages
    28
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2011
    Messages : 28
    Par défaut
    Merci pour la simplification de la requête, cependant dans :

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    LEFT JOIN TXCOM_COMMERCIAL AS TC
      ON TC.COMMERCIAL = CO.CODE
         AND TC.GFAM  = P.GRDFAMILLE        
         AND TC.FAMILLE = P.FAMILLE

    les champs en relation sont du même type dans la jointure qui ne fonctionne pas.
    J'ai reporté votre requête et j'ai toujours le même message.

    Expression de jointure non supportée

    Je ne pige pas
    Merci pour une autre idée
    A+

Discussions similaires

  1. Requête SQL en delphi
    Par sondo dans le forum Bases de données
    Réponses: 4
    Dernier message: 27/09/2008, 06h15
  2. Réponses: 26
    Dernier message: 17/07/2008, 14h17
  3. Syntaxe requête SQL dans JCL MVS pour lire sous AIX
    Par Claire de Morsang dans le forum DB2
    Réponses: 2
    Dernier message: 18/03/2008, 17h14
  4. Requête SQL avec paramètre sur BDD Access
    Par BigMike dans le forum Windows Forms
    Réponses: 3
    Dernier message: 07/06/2007, 12h21
  5. problème de requête SQL sur 3 tables pour un while
    Par carmen256 dans le forum Requêtes
    Réponses: 3
    Dernier message: 13/04/2006, 16h55

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