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

SQL Firebird Discussion :

[D7][IB6] déclaration des UDF invisibles pour l'application


Sujet :

SQL Firebird

  1. #1
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut [D7][IB6] déclaration des UDF invisibles pour l'application
    Bonjour,

    Je reprends une application sous Delphi connectée à une base sous Interbase 6. J'ai modifié une requête SQL existante pour invoquer des UDF (DAYSBETWEEN, MAXDATE et MINDATE). Depuis cette modification, l'exécution de cette requête SQL plante le programme.

    Je pense que l'erreur vient de la localisation des UDF ; pourtant je les ai déclarées sous IBExpert et j'ai exécuté cette même requête sous IBConsole & IBExpert et... ça passe sans souci !

    Ce qui m'étonne d'autant plus, c'est que les autres requêtes SQL de l'application (qui s'exécutent parfaitement) utilisent d'autres UDF (que je vois de la même manière sous IBConsole).

    Voici 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
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
        SQL.Add('SELECT SUM(cde_nbpers*DAYSBETWEEN( EXTRACTDATE(MAXDATE(:DateDu, EXTRACTDATE(cde_datarriv))), '+
                '                                   EXTRACTDATE(MINDATE(:DateAu+1, EXTRACTDATE(cde_datdepar))) )) nbPersMois '+
                'FROM entetes_resa er1 '+
                'WHERE EXISTS (SELECT ''+'' '+
                '            FROM entetes_resa er2 '+
                '            WHERE er2.cde_codresa=er1.cde_codresa '+
                '            AND er2.cde_noenreg=er1.cde_noenreg '+
                '            AND er2.cde_nochb=er1.cde_nochb '+
                '            AND EXTRACTDATE(er2.cde_datarriv) <= :DateAu '+
                '            AND EXTRACTDATE(er2.cde_datdepar) >= :DateDu+1 '+
                '            AND er2.cde_actif=''O'' '+
                '            AND er2.cde_arrive=''O'' '+
                '            AND er2.cde_noenreg<>'+IntToStr(GROUP_LEADER_NOENREG)+' '+
                '            GROUP BY er2.cde_codresa, er2.cde_nochb)');
        DecodeDate(DateMC, Annee, Mois, Jour);
        ParamByName('DateDu').AsDate := EncodeDate(Annee, Mois, 1);
        ParamByName('DateAu').AsDate := DateMC;
        Open;
        try
          Nb_Pers_Mois:=FieldByName('nbPersMois').AsInteger;
        except
          Nb_Pers_Mois:=0;
        end; // try
    Merci d'avance pour vos remarques.

  2. #2
    Membre chevronné

    Profil pro
    Inscrit en
    Avril 2005
    Messages
    1 673
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 673
    Points : 1 775
    Points
    1 775
    Par défaut
    L'erreur ne venait pas des UDF mais des paramètres d'entrées car dans la requête SQL :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    '...EXTRACTDATE(MINDATE(:DateAu+1, EXTRACTDATE...'
    est incorrect.
    Par conséquent , voici le code qui fonctionne :
    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
        SQL.Add('SELECT SUM(cde_nbpers*DAYSBETWEEN( EXTRACTDATE(MAXDATE(:DateDu, EXTRACTDATE(cde_datarriv))), '+
                '                                   EXTRACTDATE(MINDATE(:DateAuLendemain, EXTRACTDATE(cde_datdepar))) )) nbPersMois '+
                'FROM entetes_resa er1 '+
                'WHERE EXISTS (SELECT ''+'' '+
                '            FROM entetes_resa er2 '+
                '            WHERE er2.cde_codresa=er1.cde_codresa '+
                '            AND er2.cde_noenreg=er1.cde_noenreg '+
                '            AND er2.cde_nochb=er1.cde_nochb '+
                '            AND EXTRACTDATE(er2.cde_datarriv)<=:DateAu '+
                '            AND EXTRACTDATE(er2.cde_datdepar)>=:DateDuLendemain '+
                '            AND er2.cde_actif=''O'' '+
                '            AND er2.cde_arrive=''O'' '+
                '            AND er2.cde_noenreg<>'+IntToStr(GROUP_LEADER_NOENREG)+' '+
                '            GROUP BY er2.cde_codresa, er2.cde_nochb)');
        DecodeDate(DateMC, Annee, Mois, Jour);
        ParamByName('DateDu').AsDate := EncodeDate(Annee, Mois, 1);
        ParamByName('DateDuLendemain').AsDate := EncodeDate(Annee, Mois, 2);
        ParamByName('DateAu').AsDate := DateMC;
        ParamByName('DateAuLendemain').AsDate := DateMC+1;
        Open;
        try
          Nb_Pers_Mois:=FieldByName('nbPersMois').AsInteger;
        except
          Nb_Pers_Mois:=0;
        end; // try

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

Discussions similaires

  1. [SP-2007] [WSS3] "Ajouter des utilisateurs" invisible pour un admin
    Par linati dans le forum SharePoint
    Réponses: 0
    Dernier message: 04/03/2011, 10h57
  2. Réponses: 38
    Dernier message: 27/08/2009, 19h23
  3. Réponses: 3
    Dernier message: 06/03/2009, 21h24
  4. [Outils] Quels sont ceux dédiés à des tests automatisés pour une application WPF ?
    Par rsiwpf dans le forum Windows Presentation Foundation
    Réponses: 1
    Dernier message: 23/09/2008, 17h21
  5. Où trouver des images PNG pour une application ?
    Par Pythonesque dans le forum Imagerie
    Réponses: 5
    Dernier message: 10/07/2007, 14h44

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