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 :

problème de requête avec accolades


Sujet :

Delphi

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut problème de requête avec accolades
    Salut tous j'ai un problème que je retourne dans tous les sensses sans résultat .
    Je recherche tous les enregistrements entre deux dates.
    voici ma requête date1 et de type Date je suis sous paradox

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataModule1.Query10.SQL.Clear;
    DataModule1.Query10.SQL.Add('select * from Amicalistes.DB');
    DataModule1.Query10.SQL.Add ('WHERE Date1<'+ QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker1.date))+' AND (Date1 >'+ QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker2.date)) );
    DataModule1.Query10.Open;
    avec cette requête aucun résultat pourtant il devrait y en avoir.

    j'ai réduit ma requête pour voir le problème avec une seule condition

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataModule1.Query10.SQL.Clear;
    DataModule1.Query10.SQL.Add('select * from Amicalistes.DB');
    DataModule1.Query10.SQL.Add ('WHERE Date1<'+ QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker1.date)));
    DataModule1.Query10.Open;
    la ma requête me donne le bon résultat

    j'ai donc ajouter mes condition entre des parenthèses

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataModule1.Query10.SQL.Clear;
    DataModule1.Query10.SQL.Add('select * from Amicalistes.DB');
    DataModule1.Query10.SQL.Add ('WHERE (Date1<'+ QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker1.date)))+' AND (Date1 >'+ QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker2.date))) );
    DataModule1.Query10.Open;
    toujours rien mais en plus un message d'érreur
    [Erreur] cadeau1.pas(65): Types incompatibles : 'String' et 'Integer'
    [Erreur] cadeau1.pas(65): 'END' attendu(e) mais ')' trouvé(e)
    [Erreur fatale] Amicale_CHR.dpr(47): Impossible de compiler l'unité utilisée 'cadeau1.pas'
    je ne comprend pas ou et le problème pouvez-vous me venir en aide ?
    merci d'avance

  2. #2
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Il faut éviter les QuotedStr sur des champs de type date !!
    Sauf si tu inverse le mois et le jour...

    Utilise les Paraméters.

  3. #3
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut test
    Citation Envoyé par BuzzLeclaire Voir le message
    Salut,

    Il faut éviter les QuotedStr sur des champs de type date !!
    Sauf si tu inverse le mois et le jour...

    Utilise les Paraméters.
    j'ai supprimer QuotedStr

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    DataModule1.Query10.SQL.Clear;
    DataModule1.Query10.SQL.Add('select * from Amicalistes.DB');
    DataModule1.Query10.SQL.Add ('WHERE Date1<'+ FormatDateTime('mm/dd/yyyy',DateTimePicker1.date)+' AND Date1 >'+ FormatDateTime('mm/dd/yyyy',DateTimePicker2.date) );
    DataModule1.Query10.Open;

    mais cela ne fonctionne pas.j'ai une difference de type

  4. #4
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Salut,

    Quand je disais ne pas utiliser les quotedstr, je ne disais pas les enlever comme cela, de plus je te proposais d'utiliser les parameters !

    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
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
      SQL.Add('Where (Date1 Between :xDebut And :xFin) ' );
      Parameters.ParamByName('xDebut').DataType:= ftDateTime;
      Parameters.ParamByName('xFin').DataType  := ftDateTime;
      Parameters.ParamByName('xDebut').Value   := StrToDateTime(FormatDateTime('dd/mm/yyyy',DateTimePicker1.date));
      Parameters.ParamByName('xFin').Value     := StrToDateTime(FormatDateTime('dd/mm/yyyy',DateTimePicker2.date));
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;
    Attention il est fort propable que ton champ date soit sans les heures et que ton composant datetimepicker te retourne des heures...

    A toi d'adapter en conséquence.

  5. #5
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    ALTERNATIVES

    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
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
      SQL.Add('Where (Date1 Between :xDebut And :xFin) ' );
      Parameters.ParamByName('xDebut').DataType:= ftDate;
      Parameters.ParamByName('xFin').DataType  := ftDate;
      Parameters.ParamByName('xDebut').Value   := StrToDate(FormatDateTime('dd/mm/yyyy',DateTimePicker1.date));
      Parameters.ParamByName('xFin').Value     := StrToDate(FormatDateTime('dd/mm/yyyy',DateTimePicker2.date));
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;
    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
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
      SQL.Add('Where (Date1 Between :xDebut And :xFin) ' );
      Parameters.ParamByName('xDebut').DataType:= ftDate;
      Parameters.ParamByName('xFin').DataType  := ftDate;
      Parameters.ParamByName('xDebut').Value   := DateTimePicker1.date;
      Parameters.ParamByName('xFin').Value     := DateTimePicker2.date;
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut probleme
    Citation Envoyé par BuzzLeclaire Voir le message
    Salut,

    Quand je disais ne pas utiliser les quotedstr, je ne disais pas les enlever comme cela, de plus je te proposais d'utiliser les parameters !

    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
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
      SQL.Add('Where (Date1 Between :xDebut And :xFin) ' );
      Parameters.ParamByName('xDebut').DataType:= ftDateTime;
      Parameters.ParamByName('xFin').DataType  := ftDateTime;
      Parameters.ParamByName('xDebut').Value   := StrToDateTime(FormatDateTime('dd/mm/yyyy',DateTimePicker1.date));
      Parameters.ParamByName('xFin').Value     := StrToDateTime(FormatDateTime('dd/mm/yyyy',DateTimePicker2.date));
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;
    Attention il est fort propable que ton champ date soit sans les heures et que ton composant datetimepicker te retourne des heures...

    A toi d'adapter en conséquence.

    Merci de ton aide j'ai toujours un petit problème je n'ai plus l'aide de delphi je suis en Win 7 il faut surement déclarer Parameters dans use
    [Erreur] cadeau1.pas(68): Identificateur non déclaré : 'Parameters'
    [Erreur] cadeau1.pas(68): Opérateur ou point-virgule manquant
    [Erreur] cadeau1.pas(68): Identificateur non déclaré : 'ftDate'
    [Erreur] cadeau1.pas(69): Opérateur ou point-virgule manquant
    [Erreur] cadeau1.pas(70): Opérateur ou point-virgule manquant
    [Erreur] cadeau1.pas(71): Opérateur ou point-virgule manquant
    [Erreur] cadeau1.pas(84): ';' attendu(e) mais '.' trouvé(e)
    [Erreur] cadeau1.pas(86): Déclaration attendu(e) mais fin de fichier trouvé(e)

  7. #7
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Ok,

    Regarde les alternatives que je t'ai mis...

    Les uses

    DB et ADODB

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    Ok,

    Regarde les alternatives que je t'ai mis...

    Les uses

    DB et ADODB
    non j'ai fais un test avec les alternative et DB dans les uses mais j'ai toujours le même message

    je suis sous paradox avec un query

  9. #9
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    PARADOX...

    Je n'utilise pas ce SGBD mais admettons :

    en texte

    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
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('dd/mm/yyyy',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('dd/mm/yyyy',DateTimePicker2.date)) + ' )' );
     
    // OU
     
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker2.date)) + ' )' );
     
    // OU
     
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker2.date)) + ' )' );
     
    // OU
     
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('mmddyyyy',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('mmddyyyy',DateTimePicker2.date)) + ' )' );
     
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;

  10. #10
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut
    Citation Envoyé par BuzzLeclaire Voir le message
    PARADOX...

    Je n'utilise pas ce SGBD mais admettons :

    en texte

    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
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('dd/mm/yyyy',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('dd/mm/yyyy',DateTimePicker2.date)) + ' )' );
     
    // OU
     
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('yyyy/mm/dd',DateTimePicker2.date)) + ' )' );
     
    // OU
     
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('mm/dd/yyyy',DateTimePicker2.date)) + ' )' );
     
    // OU
     
      SQL.Add('Where (Date1 Between  '+QuotedStr(FormatDateTime('mmddyyyy',DateTimePicker1.date)) ' And ' + QuotedStr(FormatDateTime('mmddyyyy',DateTimePicker2.date)) + ' )' );
     
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;

    merci vraiment de ton aide .J'ai donc pris ce code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    With DataModule1.Query10 do
    begin
      SQL.Clear;
      SQL.Add('select * from Amicalistes.DB ');
     SQL.Add('Where (Date1 > '+QuotedStr(FormatDateTime('dd/mm/yyyy',DateTimePicker1.date))+ ' And '+ QuotedStr(FormatDateTime('dd/mm/yyyy',DateTimePicker2.date)) + '' );
     
      Try
        Open;
      Finally
       // Peut-etre prévoir la fermeture ?
      end;
    end;
    end;
    je compile sans problèmes je créer mes date avec les DateTimePicker je valide. et j'ai le message
    Fin de commande inattendue élément '12/10/2012' numero de ligne 2

  11. #11
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Tu as oublié la paranthèse à la fin entre tes 2 cotes


  12. #12
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Je m'apperçoit que tu n'utilise pas Between ???, tu n'a pas repris ma proposition en fait.


    Regarde bien.

  13. #13
    Expert confirmé
    Avatar de Ph. B.
    Homme Profil pro
    Freelance
    Inscrit en
    Avril 2002
    Messages
    1 784
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 57
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Avril 2002
    Messages : 1 784
    Points : 5 915
    Points
    5 915
    Par défaut
    Bonjour,

    @BuzzLeclaire l'a dit, mais je vais appuyer sa réponse !

    La requête est mal construite et devrait utiliser la condition BETWEEN.
    De plus s'agissant de date, il nettement préférable de passer par les paramètres plutôt que par une mise en forme textuelle via Delphi qui ne va correspondre que rarement au format attendu par le moteur de bases de données !

    Ce la donne :
    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
      With DataModule1.Query10 do
      begin
        SQL.Clear;
        SQL.Add('select * from Amicalistes.DB ');
        SQL.Add('where Date1 between :Date1 and :Date2');
        //
        ParamByName('Date1').AsDateTime := DateTimePicker1.Date;
        ParamByName('Date2').AsDateTime := DateTimePicker2.Date;
     
        //try
          Open;
        //finally
          // Peut-etre prévoir la fermeture ?
          // JUSTE APRES L'OUVERTURE, C'EST BALLOT !
        //end;
      end;
    Philippe.

  14. #14
    Membre éprouvé Avatar de BuzzLeclaire
    Homme Profil pro
    Dev/For/Vte/Ass
    Inscrit en
    Août 2008
    Messages
    1 606
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Dev/For/Vte/Ass

    Informations forums :
    Inscription : Août 2008
    Messages : 1 606
    Points : 1 113
    Points
    1 113
    Par défaut
    Citation Envoyé par Ph. B. Voir le message
    //finally
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
          // Peut-etre prévoir la fermeture ?
          // JUSTE APRES L'OUVERTURE, C'EST BALLOT !
        //end;
      end;
    Mdr. Evidement il doit y avoir du code je suppose entre le open et le finally

    je vais pas tout écrire en plus...

    Pour le reste merci d'avoir appuyé, j'ai donné un max de possibilité, les parameters étant le mieux comme expliqué précédement.

    bye.

  15. #15
    Membre habitué
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    483
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2004
    Messages : 483
    Points : 128
    Points
    128
    Par défaut extra
    Super le code fonctionne magnifiquement bien je vous remercies tous les deux infiniment

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

Discussions similaires

  1. Problème de requête avec l'agrégat
    Par bertrand_declerck dans le forum Langage SQL
    Réponses: 10
    Dernier message: 24/08/2005, 16h59
  2. Problème concaténation requête avec ORACLE
    Par kobe dans le forum Bases de données
    Réponses: 2
    Dernier message: 16/08/2005, 11h57
  3. Réponses: 3
    Dernier message: 11/10/2004, 17h26
  4. problème de requête avec jointures
    Par tinhat dans le forum Requêtes
    Réponses: 7
    Dernier message: 11/08/2003, 10h33
  5. Problème dans requête avec count()
    Par BadFox dans le forum Requêtes
    Réponses: 3
    Dernier message: 08/07/2003, 18h02

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