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.