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 :

problème requete paramétrée


Sujet :

SQL Firebird

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut problème requete paramétrée
    Bonjour,

    je n'arrive à comprendre pourquoi le requete paramétrée suivate ne fonctionne pas:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    IBquery1.SQL.Clear;
    IBquery1.SQL.Add('select count(*) as NB_LG_ERR from L_ACHAT');
    IBquery1.SQL.Add('join L_BONREC on L_BONREC.LRIDLACHAT=L_ACHAT.LAIDLACHAT');
    IBquery1.SQL.Add('join BONREC on BONREC.BOIDREC=L_BONREC.LRIDREC');
    IBquery1.SQL.Add('join ACHAT on ACHAT.ACIDACHAT=L_ACHAT.LAIDACHAT');
    IBquery1.SQL.Add('where (BONREC.BODATREC >= L_ACHAT.LADLIVMOD + :JMIN) and (BONREC.BODATREC <= L_ACHAT.LADLIVMOD + :JMAX) and (ACHAT.ACDATACHAT between :debut and :fin) and (ACHAT.ACIDFOUR=:IDFOUR)');
    IBquery1.ParamByName('debut').AsDate:=JvDatePickerEdit1.Date;
    IBquery1.ParamByName('fin').AsDate:=JvDatePickerEdit2.Date;
    IBquery1.ParamByName('idfour').AsInteger:=JvDBLookupEdit1.LookupValue;
    IBquery1.ParamByName('jmin').AsInteger:=jmini;
    IBquery1.ParamByName('jmax').AsInteger:=jmaxi;
    IBquery1.Open;
    J'ai compris que c'est l'expression where qui pose problème et que c'est à cause des paramètres :jmin et :jmax que ca ne marche pas , mais je ne comprends pas pourquoi. On ne peut pas paramétrer sur une addition ?
    Cette requete provient d'une procédure stockée où jmin et jmin étaient des paramètres d'entrée.
    Cette procédure stockée fonctionne parfaitement d'où mon étonnement !!

    cordialement

  2. #2
    Modérateur
    Avatar de escartefigue
    Homme Profil pro
    bourreau
    Inscrit en
    Mars 2010
    Messages
    10 136
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loir et Cher (Centre)

    Informations professionnelles :
    Activité : bourreau
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2010
    Messages : 10 136
    Points : 38 909
    Points
    38 909
    Billets dans le blog
    9
    Par défaut
    Bonjour,

    Ce serait mieux avec votre résultat (message complet, incluant le code SQL)
    il est probable que l'une des host-variables ne contienne pas une valeur correcte (par exemple du char ou NULL dans un montant)

    Vérifiez le contenu de JMIN et JMAX et tant qu'à faire, aussi des autres HV

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut
    bonjour,

    le résultat est :
    Dynamic SQL Error.
    expression evaluation not supported.

    J'ai fait le test en portant la requete sur un éditeur sql (IBexpert) et j'ai le même résultat.
    Si je remplace jmin et jmax par des chiffres: ça fonctionne; donc ça vient de là.

    J'ai un moyen de structurer ma requete différement pour éviter le problème, donc pour moi ce n'est pas un problème bloquant: c'est juste histoire de comprendre ?
    Ca doit faire 6 mois que j'ai pas fait du SQL : il y a un truc que je ne vois pas !!

    Cordialement

  4. #4
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonsoir,

    c'est simplement ton opération sur les dates qui est incorrecte (du moins avec Firebird SQL)
    un petit DateAdd et tout rentrera dans l'ordre

    pour reprendre une partie BONREC.BODATREC >= DATEADD(:JMIN DAY TO L_ACHAT.LADLIVMOD) ou DATEADD(:JMIN,DAY,L_ACHAT.LADLIVMOD)maintenant un BETWEEN sur les dates ce serait bien aussi bizarre car tu l'utilise juste après !
    Donc sans tester
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE BONREC.BODATREC BETWEEN DATEADD(:JMIN DAY TO L_ACHAT.LADLIVMOD) AND DATEADD(:JMAX DAY TO L_ACHAT.LADLIVMOD)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Mai 2007
    Messages
    839
    Détails du profil
    Informations personnelles :
    Âge : 59
    Localisation : France

    Informations forums :
    Inscription : Mai 2007
    Messages : 839
    Points : 262
    Points
    262
    Par défaut
    bonjour,

    Je ne connaissais pas cette fonction pour additionner des temps.
    Maintenant ça fonctionne bien.

    Merci beaucoup

  6. #6
    Rédacteur/Modérateur

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

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

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 043
    Points : 40 957
    Points
    40 957
    Billets dans le blog
    62
    Par défaut
    Bonjour,

    ne pas oublié le petit voire un petit pour la solution

    hier soir je ne me suis pas étendu sur l'erreur en soit, elle ne vient pas forcément du paramétrage mais peut être aussi du type de champ Date (je pense que ce serait passé) ou TimeStamp (qui ne passera pas) sans parler de la version de Firebird et du Dialect de la base.
    J'ai encore une BDD dialect 1 et les additions de dates telle que tu le posais ne fonctionne pas
    (fut un temps, FB1.5, j'utilisais des TRUNCs sur la date avant de faire ce type de calcul << très mauvaise idée, je suis ensuite passé sur des UDF mais DateAdd existe depuis 2.1 ce qui facilite la vie)
    MVP Embarcadero
    Delphi installés : D3,D7,D2010,XE4,XE7,D10 (Rio, Sidney), D11 (Alexandria), D12 (Athènes)
    SGBD : Firebird 2.5, 3, SQLite
    générateurs États : FastReport, Rave, QuickReport
    OS : Window Vista, Windows 10, Windows 11, Ubuntu, Androïd

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

Discussions similaires

  1. problème du paramètre dans une requete hql
    Par moha_alnif dans le forum iReport
    Réponses: 4
    Dernier message: 01/05/2009, 20h50
  2. problème du paramètre dans une requete hql
    Par moha_alnif dans le forum Hibernate
    Réponses: 0
    Dernier message: 01/05/2009, 19h03
  3. Problème de Requete paramètrée
    Par Shibron dans le forum Débuter
    Réponses: 3
    Dernier message: 16/01/2009, 13h40
  4. Problème de requete paramétrée de recherche
    Par demando77 dans le forum Windows Forms
    Réponses: 1
    Dernier message: 13/05/2008, 15h01
  5. Problème requete paramétré
    Par dubidon dans le forum VB.NET
    Réponses: 22
    Dernier message: 21/05/2007, 14h59

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