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

Bases de données Delphi Discussion :

Comment faire… pour qu’il prenne en compte(Suite)


Sujet :

Bases de données Delphi

  1. #1
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut Comment faire… pour qu’il prenne en compte(Suite)
    Bonsoir,

    Je suis en D6+Access2000 ,
    Var1, Var2 sont des TdateTimePicker
    Table.champDate

    Je voudrais écrire le SQL d’une requête en lui indiquant la recherche suivante
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Where Table.champDate >= :Var1 and Table.champDate <= :Var2
    Voilà ce que j’utilise
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >='+ Datetostr(DTP_e_gare_d.Date)+') and (Data_be_gare_ch <='+ Datetostr(DTP_e_gare_f.Date)+')');
    Reponse(il m'affiche)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    (Data_be_gare_ch >=20/06/2008) and (Data_be_gare_ch <=24/06/2008)
    mais ça ne marche pas !!! Puisque je vois qu’il ne prend pas en compte

    je sais qu’il y a (que d’ailleurs j’utilise)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    where (Data_be_gare_ch between :date0 and :date1)
    et puis donnez aux parameter les valeurs,
    Mais je voudrais l’obliger a refaire une recherche sur Data_be_gare_ch afin de pouvoir re-filtré

    Re-Bonjour,
    Oui d’accord avec toi jpcheck(ds le forum "Requêtes et SQL"),
    Mais alors il y aurait un truc du genre à le convertir dans le bon format !!!
    J’ai essayé entre des ''' ou encore
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >=#'+ Datetostr(DTP_e_gare_d.Date)+'#)')
    mais rien a faire, quoi d’autre a essayé???

    merci a vs tous
    810mcu

  2. #2
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Quel est le SGBD que tu utilses , MySQL ?
    Quel est le type du champs Data_be_gare_ch ?
    Si c'est un champ date dans MySQL, il attend la date au format suivant :
    YYYY-MM-DD

    En espérant t'avoir éclairci sur le sujet
    A+

  3. #3
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Salut ero-sennin,
    Je suis en D6 + Access2000,
    type du champs Data_be_gare_ch = Date

    Oui je sais que le format en SQL doit etre différant
    mais alors comment le déclarer en Delphi afin que le query le prenne au bon format ???

    @+

  4. #4
    Membre expérimenté

    Homme Profil pro
    Inscrit en
    Mars 2004
    Messages
    897
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2004
    Messages : 897
    Points : 1 561
    Points
    1 561
    Par défaut
    Accèdes-tu à ta base Access via ODBC ?
    Si c'est le cas tu peux formater tes dates de la façon suivante :

    {d 'aaaa-mm-dd'}.

    Un petit lien qui aborde le sujet sur MSDN

    je t'ai réalisé rapidement une fonction qui t'effectue la conversion TDateTime vers le format ODBC timeStamp

    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
     
    function encodeODBCTimeStamp(AdateTime: TDateTime):string;
    const
      stOut : string = '{d ''%d-%s-%s''}';
    var
      y,m,d: word;
      mm,dd: string;
    begin
      DecodeDate(Adatetime,y,m,d);
      mm := intToStr(m);
      if m < 10 then mm := '0' + mm;
      dd := intToStr(d);
      if d < 10 then dd := '0' + dd;
      Result := format(stOut,[y,mm,dd]);
    end;
    Pensez à utiliser les tags dans le titre.
    Avant de poser une question reportez-vous à la FAQ Delphi
    Respectez les règles du forum.

  5. #5
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Rien ne vaut un bon paramètre, et il vaut mieux dans ce cas, utiliser le Between

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    With Query do
    begin
      SQL.Add('select ...');
      SQL.Add('Where Data_be_gare_ch between :PDebut and :PFin');
      With parameters do // si le composant est un adoQuery sinon supprimer
      begin
        ParamByName('PDebut').Value := Var1;
        PAramByName('PFin').Value := Var2;
      end;
    end;
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  6. #6
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Salut Rayek,
    Mon problème c’est que je suis dans une séquence ou le query ce construit en fonction des éléments remplie par l’utilisateur,
    En utilisant un Between je suis obliger de le déclarer au début de la construction du SQL du query (a moins que qq connaisse autre procéder, si oui je suis prenant)
    Et si (comme mon cas) que j’ai plusieurs colonnes avec des dates ou je pourrais procéder a la recherche de différentes dates là !!! Ça ne passe pas…

  7. #7
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Salut Pascal Jankowski,
    Ton code pourrait m’aider,
    au fait je dois convertir cette date en format YYYY-MM-DD (comme le dit ero-sennin) en Delphi afin que le SQL le considère comme il faut…
    je me penche dessus

  8. #8
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Un simple FormatDateTime devrait suffit :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >='+ FormatDateTime('YYYY-MM-DD',DTP_e_gare_d.Date)+') and (Data_be_gare_ch <='+ FormatDateTime('YYYY-MM-DD',DTP_e_gare_f.Date)+')');

  9. #9
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    c’est justement ça ero-sennin, super
    mais ça coince
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >='+FormatDateTime(('yyyy-mm-dd',
    là il me dit ')' expected but ',' found !!!
    j’ai essayé de faire ce qu’il dit mais il ne veut rien savoir !!!

  10. #10
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    un sur FormatDateTime serait bien, il faut apprendre à comprendre les fonctions qu'on fournit sinon ça sert à rien.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  11. #11
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >='+ StrToDate(FormatDateTime('YYYY-MM-DD',DTP_e_gare_d.Date))+') and (Data_be_gare_ch <='+ StrToDate(FormatDateTime('YYYY-MM-DD',DTP_e_gare_f.Date))+')');
    L'erreur de la parenthèse est rectifiée ... Je n'ai pas testé le code donc à voir

  12. #12
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    ok les gars, j'ai trouver aussi, est testé, ça passe...

    mais je constate que il me fait la recherche avec le format indique (yyyy/mm/dd) ou (MM/DD/YYYY)

    Exemple
    Requete demander
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    DTP_e_gare_d = 20/06/2008
    DTP_e_gare_f = 24/06/2008
    Résultat obtenu
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Where
    (Data_be_gare_ch >=06/20/2008)
    and
    (Data_be_gare_ch <=06/24/2008)
    mais je constate que rien ne s’affiche !!!
    serrait il a cause que ma Db a le format (dd/mm/yyyy) ???

  13. #13
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Oui, j'ai édité mon post
    Le StrToDate n'est pas utile ici vu que tu fais une simple chaine de caractère.

    Comme tu as Access (ce que je n'avais pas remarqué), je pense que les dates sont au format mm/dd/yyyy

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >=#'+ FormatDateTime('mm/dd/yyyy',DTP_e_gare_d.Date)+'#) and (Data_be_gare_ch <=#'+ FormatDateTime('mm/dd/yyyy',DTP_e_gare_f.Date)+'#)');
    J'espère vraiment que ça marchera ce coup ci!
    Comme Rayek, moi je pencherai pour des requêtes paramétrées ... mais bon

  14. #14
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    ero-sennin,

    Dis-moi au lieu de "–" j’utilise "/" y a 1 problème ???

  15. #15
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    En revanche,
    rien a faire ds ma requete !!!
    Il ne veut rien faire et pour tant
    oui il affiche ce ci, mais aucun resultat
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Where
    (Data_be_gare_ch >=20/06/2008) and (Data_be_gare_ch <=24/06/2008)
    il ne devrait pas avoir 'entre les dates'???

  16. #16
    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
    deux ou trois remarques
    1. le passage des dates par paramètres cf Rayek (post 14h54) est nettement plus efficace et permet de s'affranchir du format voulu par la base de données
    2. idem pour le between
    3. enfin dans ton dernier post je pense que tu oublies l'heure( là je suis moins sur de moi puisque Access+moi=3 au moins) si tu tiens vraiment à ne pas utiliser les pramètres je te suggère de mettre les points sur les i
      pour le SQL


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    query.SQL.Add('(Data_be_gare_ch >=CAST("'+ FormatDateTime('mm/dd/yyyy 00:00:00',DTP_e_gare_d.Date)+'" AS DATE)) and (Data_be_gare_ch <=CAST("'+ FormatDateTime('mm/dd/yyyy 23:59:59',DTP_e_gare_f.Date)+'" AS DATE))');
    nota : il manque peut être quelques parentheses
    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

  17. #17
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Bonjour a tous
    Oui tout a fait, SergioMaster, Rayek à raison le between reste incontournable pour ce genre de requête.

    SergioMaster, j’ai testé ce ci, qui est a toi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    query.SQL.Add('(Data_be_gare_ch >=CAST("'+ FormatDateTime('mm/dd/yyyy 00:00:00',DTP_e_gare_d.Date)+'" AS DATE)) and (Data_be_gare_ch <=CAST("'+ FormatDateTime('mm/dd/yyyy 23:59:59',DTP_e_gare_f.Date)+'" AS DATE))');
    modifier par moi
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    q_procura_agenda_grume_2.SQL.Add('where Data_be_gare_ch >=CAST("'+ FormatDateTime('mm/dd/yyyy 00:00:00',DTP_e_gare_d.Date)+'" AS DATE) and Data_be_gare_ch <=CAST("'+ FormatDateTime('mm/dd/yyyy 23:59:59',DTP_e_gare_f.Date)+'" AS DATE)');
    Résultat
    Erreur de syntaxe (opérateur absent) dans l’expression
    Ne passe pas !!!!

    est en relisant le post de Rayek, j’ai flashé, il a raison ce gars
    Alors j’ai essayé ce ci,
    Oui j'ai TAdoQuery
    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
    if (DTP_e_gare_d.Date<>01/01/2000) then
        begin
          If xPass Then
            Begin
              q_procura_agenda_grume_2.SQL.Add('and');
            end
          else
             Begin
               q_procura_agenda_grume_2.SQL.Add('Where');
               xPass := True;
             end;
          q_procura_agenda_grume_2.SQL.Add('Data_be_gare_ch between :PDebut_gare and :PFin_gare');
     
          With q_procura_agenda_grume_2.parameters do 
            begin
              q_procura_agenda_grume_2.ParamByName('PDebut_gare').Value := DTP_e_gare_d.Date;
              q_procura_agenda_grume_2.PAramByName('PFin_gare').Value := DTP_e_gare_f.Date;
            end;
        end;
    Mais il me dit que 'Undeclared indetifier' 'ParamByName'!!!
    effectivement il ne propose que
    ParamCheck et Parameters !!! là blocage de ma part...

  18. #18
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    SergioMaster,
    ta solution est aussi tres bonne,
    il faut c’est que je la fasse marcher…..

  19. #19
    Rédacteur/Modérateur
    Avatar de ero-sennin
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Juillet 2005
    Messages
    2 965
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Nord (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2005
    Messages : 2 965
    Points : 4 935
    Points
    4 935
    Par défaut
    Salut,

    Apparemment tu n'as pas compris l'instruction With ...
    Cela permet d'éviter de réécrire une portion de code similaire dans un bloc ...

    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
    if (DTP_e_gare_d.Date<>01/01/2000) then
        begin
          If xPass Then
            Begin
              q_procura_agenda_grume_2.SQL.Add('and');
            end
          else
             Begin
               q_procura_agenda_grume_2.SQL.Add('Where');
               xPass := True;
             end;
          q_procura_agenda_grume_2.SQL.Add('Data_be_gare_ch between :PDebut_gare and :PFin_gare');
     
          With q_procura_agenda_grume_2.parameters do 
            begin
              ParamByName('PDebut_gare').Value := DTP_e_gare_d.Date;
              PAramByName('PFin_gare').Value := DTP_e_gare_f.Date;
            end;
        end;
    J'ai modifié ton code ... Logiquement ça devrait passer!
    A+

  20. #20
    Membre du Club
    Inscrit en
    Juillet 2002
    Messages
    188
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 188
    Points : 47
    Points
    47
    Par défaut
    Mais ouiii
    ero-sennin, tu as raison
    Malheureusement je ne suis plus devant ma procédure…
    Je la teste des que je peux, mais ça ma l’air ok

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Listbox et datatemplate : comment faire pour qu'il prenne la largeur complète ?
    Par zax-tfh dans le forum Windows Presentation Foundation
    Réponses: 3
    Dernier message: 25/06/2009, 09h50
  2. Réponses: 1
    Dernier message: 02/12/2008, 21h16
  3. Comment faire… pour qu’il prenne en compte
    Par 810mcu dans le forum Requêtes et SQL.
    Réponses: 3
    Dernier message: 11/07/2008, 11h10
  4. Comptes MSN Messenger+Hotmail, comment faire pour les récupérer ?
    Par PilouEnGalère dans le forum Messagerie instantanée
    Réponses: 2
    Dernier message: 27/08/2007, 19h04
  5. Comment faire pour qu'un <div> prenne la hauteur d'image
    Par pierrot10 dans le forum Mise en page CSS
    Réponses: 2
    Dernier message: 18/03/2007, 19h02

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