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 :Merci d'avance pour vos remarques.
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
Partager