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 :

Filtre SQL sur un champs calculé.


Sujet :

Bases de données Delphi

  1. #1
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut Filtre SQL sur un champs calculé.
    Salut à tous.

    J'ai un ADOQuery avec un champs de type Date.
    J'ai créer 4 nouveau champs Annee, Semestre,trimestre, mois et a renseigner ces champs dans l'événement OnCalcField du ADOQuery.
    Jusque là, tout va bien.
    J'ai crée une unité qui permet à l'utilisateur de créer des filtres basiques visuellement et renvoi une syntaxe SQL Where.
    Le souci est que ça plante dès qu'on applique des conditions sur les champs calculés.
    J'ai donc modifier mon code SQL et j'ai mis directement les instructions pour avoir les 4 champs directement dans la requête (YEAR, MONTH et avec CASE etc). Mais le resultat est pareil :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Annee : nom de colonne incorrecte.
    Comme dois je proceder ?.

    Merci à vous.
    On progresse .....

  2. #2
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut Andry
    Citation Envoyé par Andry Voir le message
    J'ai donc modifier mon code SQL et j'ai mis directement les instructions pour avoir les 4 champs directement dans la requête (YEAR, MONTH et avec CASE etc).
    Tu as un exemple du SQL généré, car a priori pas de raison qu'il ne reconnaisse pas le champ ANNEE.

    @+ Claudius

  3. #3
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Salut Claudius,
    Voici la requête en question
    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
     
    SELECT     
       YEAR(FDC.DO_Date) as DO_Annee,
       CASE 
          WHEN (MONTH(FDC.DO_Date) BETWEEN 1 AND 6) THEN '1er'
          WHEN (MONTH(FDC.DO_Date) BETWEEN 7 AND 12) THEN '2ème' 
       END AS DO_Semestre,   
       CASE 
          WHEN (MONTH(FDC.DO_Date) BETWEEN 1 AND 3) THEN '1er'
          WHEN (MONTH(FDC.DO_Date) BETWEEN 4 AND 6) THEN '2ème' 
          WHEN (MONTH(FDC.DO_Date) BETWEEN 7 AND 9)   THEN '3ème' 
          WHEN (MONTH(FDC.DO_Date) BETWEEN 10 AND 12) THEN '4ème' 
       END AS DO_Trimestre,
       MONTH(FDC.DO_DATE) as DO_Mois, 
       FDC.DO_Date,
       FDC.CT_Num,
       CLI.CT_Intitule,      
       FDC.AR_Ref,
       FDC.DL_Design,
       ART.FA_CodeFamille, 
       FDC.DL_Qte, 
       FDC.DL_PrixUnitaire,
       FDC.DL_PrixUnitaire * FDC.DL_Qte as DO_Total,
       FDC.DL_PrixRU,
       (FDC.DL_PrixUnitaire - FDC.DL_PrixRU) * FDC.DL_Qte as DO_Marge 
    FROM F_DOCLIGNE FDC
    LEFT JOIN F_ARTICLE ART ON ART.AR_Ref = FDC.AR_Ref
    LEFT JOIN F_COMPTET CLI ON CLI.CT_Num = FDC.CT_Num
    WHERE     
      (FDC.AR_Ref Is Not Null) 
      AND (FDC.DO_Type IN (3, 6, 7))
    Dès que j'utilise l'un de DO_Annee, DO_Mois etc, j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DO_Annee : nom de colonne incorrecte.
    On progresse .....

  4. #4
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Ta requête à l'air correcte.

    Lorsque tu dis:
    Citation Envoyé par Andry Voir le message
    Dès que j'utilise l'un de DO_Annee, DO_Mois etc, j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    DO_Annee : nom de colonne incorrecte.
    L'erreur est à l'exécution de la requête ? (pour être sûr )

  5. #5
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Oui.
    Supposons que le generateur de filtre retourne et que ensuite je tente de modifier le SQL Where comme suit
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    WHERE     
      (FDC.AR_Ref Is Not Null) 
      AND (FDC.DO_Type IN (3, 6, 7))
      AND DO_Annee = 2008
    L'erreur survient dès que j'ouvre la requête.

    Merci
    On progresse .....

  6. #6
    Expert éminent sénior
    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 : 61
    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
    Points : 10 008
    Points
    10 008
    Par défaut
    Je n'avais pas fait attention

    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    WHERE
    ...
    AND YEAR(FDC.DO_Date) = 2008

    L'alias du champ n'est pas utilisable dans la clause WHERE.

    @+ Claudius

  7. #7
    Membre éprouvé
    Avatar de Andry
    Profil pro
    Informaticien
    Inscrit en
    Juillet 2002
    Messages
    1 164
    Détails du profil
    Informations personnelles :
    Localisation : Madagascar

    Informations professionnelles :
    Activité : Informaticien

    Informations forums :
    Inscription : Juillet 2002
    Messages : 1 164
    Points : 1 181
    Points
    1 181
    Par défaut
    Merci Claudius. J'ai aussi lu cette affirmation quelque part.
    Mais est ce qu'il y a un moyen de savoir que c'est un alias.
    En faite, je voudrais rendre mon générateur de filtre le plus générique possible, quitte à exclure les alias.
    On progresse .....

Discussions similaires

  1. [AdoTable] Filtre sur un champ calculé
    Par tomy29 dans le forum Bases de données
    Réponses: 10
    Dernier message: 21/02/2007, 10h34
  2. filtre numérique sur un champ texte
    Par debdev dans le forum Access
    Réponses: 15
    Dernier message: 26/05/2006, 17h45
  3. Pb de tri/critère sur un champ calculé
    Par Sakalam dans le forum Access
    Réponses: 6
    Dernier message: 10/01/2006, 18h24
  4. Utilisation de "refresh" sur un champ calculé
    Par Nicko29 dans le forum Access
    Réponses: 27
    Dernier message: 22/12/2005, 22h58
  5. tri sur des champs calculés
    Par Thib dans le forum Bases de données
    Réponses: 10
    Dernier message: 18/10/2005, 17h24

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