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

 Delphi Discussion :

delphi SQL CASE erreur


Sujet :

Delphi

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2018
    Messages : 23
    Points : 11
    Points
    11
    Par défaut delphi SQL CASE erreur
    salut , joyeuse fête pour tout le monde
    j'ai un souci avec une requête SQL avec la commande CASE ,j'utilise RAD seattle avec BDE , une fonction dans RAD qui contient
    le code :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    Function SQLText(strSelect, strWhere : String) : String;
    Begin
       Result :='SELECT B.CODRS, B.NCMP, B.BLOE, B.CTYP, '+
               'B.T_BRT, B.R_SES, B.R_IRB, B.N_PYE, (B.CCH) AS EXPERT , '+
               'CASE WHEN ASN = 20 THEN (B.NOR - T_AFM) ELSE (((B.N_PYE - T_AFM) / (20 - ASN)) * ASN) END AS HONM, ' +          
               'G.ECH00, G.ECH01, G.ECH02, G.ECH03, '+
               'G.ECH08, G.INDICE AS INDPST, "" AS INDIEP, '+
               'B.CTSCPS, B.CTNWPS, CAST(0 AS INTEGER) AS NUMBER, CAST(B.CODCH+B.NBRAE*H.T_IEAS AS CHAR(4)) AS ECHNE, ';
      If bolOrient Then
         Result :=Result+'B.NOMPRN, C.DESIGN AS DESGRD, F.DESIGN AS DESPST, D.DESIGN+"/"+D.AGEARA AS DESBNQ, '
                   Else
    ............................. reste du programme -
    je sais bien que l 'erreur de l'utilisation de CASE est la cause directe , j'ai pas pu la régler , s'il vous plait , donner moi un coup de pouce , merci

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 087
    Points
    41 087
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    Citation Envoyé par wisetechacer Voir le message
    j'utilise RAD seattle avec BDE
    OMG encore BDE en 2024, alors qu'il est obsolète depuis le début des années 2000 !

    Citation Envoyé par wisetechacer Voir le message
    Je sais bien que l'erreur de l'utilisation de CASE est la cause directe
    pas si sûr que ça que ce soit le CASE, mais d'abord de quelle SGBDR parlons-nous ?
    Déjà, il y a peut-être un problème d'alias, ASN est une des seules colonnes (avec T_AFM) à ne pas avoir de nom (ou plutôt d'alias de table) indiqué.

    NB. D.DESIGN+"/"+D.AGEARA peut aussi être une erreur si D.AGEARA=0 !

    NB2. C'est plus un problème SQL que Delphi.

    Meilleurs voeux.

  3. #3
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2018
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    Bonjour,


    OMG encore BDE en 2024, alors qu'il est obsolète depuis le début des années 2000 !


    pas si sûr que ça que ce soit le CASE, mais d'abord de quelle SGBDR parlons-nous ?
    Déjà, il y a peut-être un problème d'alias, ASN est une des seules colonnes (avec T_AFM) à ne pas avoir de nom (ou plutôt d'alias de table) indiqué.

    NB. D.DESIGN+"/"+D.AGEARA peut aussi être une erreur si D.AGEARA=0 !

    NB2. C'est plus un problème SQL que Delphi.

    Meilleurs voeux.
    Bonjour et merci pour votre reponse Mr Sergio, en faite pour une table BDE / paradox - ce n’était pas un choix -
    le message d'erreur s'afffiche ainsi: ligne 1 WHEN
    je simplifié la requête pour vous car les champs sont ainsi :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Begin
       Result :='SELECT B.CODPRS,B.CODCLS, B.CODSRV, B.CODPST, B.CODGRD, B.CODECH, '+
               'B.T_BRUT, B.N_PAYE, G.INDICE AS G.INDPST, '+
    		   'CASE WHEN B.N_ABSN = 20 THEN (B.NBRHOR - T_AFAM) ELSE (((B.N_PAYE - T_AFAM) / (20 - B.N_ABSN)) * B.N_ABSN) END AS HONM, '+
               'B.CTSCPS, B.CTNWPS, CAST(0 AS INTEGER) AS NUMBER, ';
    j’espère que vous voyez maintenant les détails ,merci encore

  4. #4
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 097
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 097
    Points : 41 087
    Points
    41 087
    Billets dans le blog
    62
    Par défaut
    Citation Envoyé par wisetechacer Voir le message
    en fait pour une table BDE / paradox - ce n’était pas un choix -
    En fait, avec Firedac, il est possible d'attaquer des tables paradox par l'intermédiaire d'ODBC.
    Cependant, le problème n'est pas là, c'est le localsql n'accepte pas CASE tout simplement (enfin tout simplement si l'on veut !).

    solution 1 :
    faire une UNION

    Result :='SELECT B.CODPRS,B.CODCLS, B.CODSRV, B.CODPST, B.CODGRD, B.CODECH, '+
    'B.T_BRUT, B.N_PAYE, G.INDICE AS G.INDPST, '+
    '(B.NBRHOR - T_AFAM) AS HONM , '+
    'B.CTSCPS, B.CTNWPS, CAST(0 AS INTEGER) AS NUMBER, '+...+
    'WHERE B.N_ABSN=20'

    +' UNION '+
    'SELECT B.CODPRS,B.CODCLS, B.CODSRV, B.CODPST, B.CODGRD, B.CODECH, '+
    'B.T_BRUT, B.N_PAYE, G.INDICE AS G.INDPST, '+
    '(((B.N_PAYE - T_AFAM) / (20 - B.N_ABSN)) * B.N_ABSN) AS HONM, '+
    'B.CTSCPS, B.CTNWPS, CAST(0 AS INTEGER) AS NUMBER,'+...+
    'WHERE B.N_ABSN<>20'

    Solution 2 : LocalSQL étant pour TQuery, il faudrait tester avec Firedac et une liaison ODBC pour voir si cela passerait.

    Je me permets quand même d'écrire que le code m'a l'air plutôt complexe, une troisième solution 3 serait peut-être de créer un champ calculé et de le "remplir" via un OnCalculate du dataset.

  5. #5
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Mai 2018
    Messages
    23
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 26
    Localisation : Autriche

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Mai 2018
    Messages : 23
    Points : 11
    Points
    11
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    En fait, avec Firedac, il est possible d'attaquer des tables paradox par l'intermédiaire d'ODBC.
    Cependant, le problème n'est pas là, c'est le localsql n'accepte pas CASE tout simplement (enfin tout simplement si l'on veut !).

    solution 1 :
    faire une UNION

    Result :='SELECT B.CODPRS,B.CODCLS, B.CODSRV, B.CODPST, B.CODGRD, B.CODECH, '+
    'B.T_BRUT, B.N_PAYE, G.INDICE AS G.INDPST, '+
    '(B.NBRHOR - T_AFAM) AS HONM , '+
    'B.CTSCPS, B.CTNWPS, CAST(0 AS INTEGER) AS NUMBER, '+...+
    'WHERE B.N_ABSN=20'

    +' UNION '+
    'SELECT B.CODPRS,B.CODCLS, B.CODSRV, B.CODPST, B.CODGRD, B.CODECH, '+
    'B.T_BRUT, B.N_PAYE, G.INDICE AS G.INDPST, '+
    '(((B.N_PAYE - T_AFAM) / (20 - B.N_ABSN)) * B.N_ABSN) AS HONM, '+
    'B.CTSCPS, B.CTNWPS, CAST(0 AS INTEGER) AS NUMBER,'+...+
    'WHERE B.N_ABSN<>20'

    Solution 2 : LocalSQL étant pour TQuery, il faudrait tester avec Firedac et une liaison ODBC pour voir si cela passerait.

    Je me permets quand même d'écrire que le code m'a l'air plutôt complexe, une troisième solution 3 serait peut-être de créer un champ calculé et de le "remplir" via un OnCalculate du dataset.
    salut et pardonnez moi pour le retard , vous avez entierement raison Mr Sergio , j'ai bricolé, la solution 1 fonctionne bien , je vous remercie .concernant la migration de BDE vers Firedac c un plus complex pour ce programme car il contient beaucoup de contraintes merci encore une fois .

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

Discussions similaires

  1. Delphy XE2 BDD: SQL Server // Erreur DBX
    Par Liomenos dans le forum Bases de données
    Réponses: 2
    Dernier message: 05/11/2013, 08h59
  2. [DTS sql server] Erreur lors de l'insertion de trop de ligne
    Par MoTUmBo dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 05/07/2005, 22h44
  3. [RAVE 5.0.04] [Delphi 7.0] Erreur StoreRAV
    Par Stef.web dans le forum EDI
    Réponses: 5
    Dernier message: 26/04/2005, 00h45
  4. [PL/SQL] CASE xxx WHEN NULL
    Par Loko dans le forum Oracle
    Réponses: 5
    Dernier message: 06/12/2004, 10h40
  5. [rave][delphi 7.0] Erreur de Compilation
    Par claude delattre dans le forum Rave
    Réponses: 1
    Dernier message: 06/10/2004, 11h50

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