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

C++Builder Discussion :

filtrer les données entre 2 dates


Sujet :

C++Builder

  1. #1
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut filtrer les données entre 2 dates
    Bonjour
    je cherche quelqu’un qui peut m'aider pour trouver le problème qui existe dans ce code.
    je veut filtrer les données qui existes entre deux date,
    le type de champ Date Texte et le masque de saisie date,abrégé.
    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
    Date2 = DateTimePicker1->Date;
    Date3 = DateTimePicker2->Date;
    Form2->Table1->First();
    if(!Form2->Table1->Eof)
     
     {
     
     
     Form2->Table1->Close();
      AnsiString a;
      a="select* FROM PEC  where Date <= " +Date3+" AND "+"Date >= " +Date2+" Order By N°Ord ASC" ;
      Form2->Query1->SQL->Clear();
      Form2->Query1->SQL->Add(a);
      Form2->Query1->ExecSQL();
      Form2->Table1->Open();
    }

  2. #2
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    Je vais te dire comment ce que je suggère à mes étudiants pour qu'ils trouvent eux-mêmes ce genre de problème.

    Je leur suggère de faire un ShowMessage de la commande SQL. 80% du temps, il voit l'erreur tout de suite.(ils peuvent aussi mettre un point d'arrêt avec le debugger, quand ils sont familiers avec le debugger, c'est plus rapide).

    S'il me disent que tout leur semble ok, je leur réponds de tester la commande avec SQL Query Browser.

    Si ça fonctionne avec SQL Browser, c'est qu'il y a un problème qui les dépasse, alors je m'assis avec eux, mais c'est relativement rare.

  3. #3
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    fainiette, il y a des choses qui me font tiquer dans ton code: Tu utilises "ExecSQL" ET "Open()" à la fois. En plus, tu ne fermes pas la requète précédente*

    "ExecSQL" c'est pour des commandes SQL qui ne retourne rien (INSERT, DELETE,UPDATE) et "Open" c'est pour une requête (SELECT). Si je ramène ça à une fonction plus générale, ça ressemble à quelque chose du genre:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    void SQL_Execute(TQuery* query, AnsiString sqlCmd, bool isSelect)
    {
      query->Close() ; // fermer requete précédente, pas d'effet si déjà fermé
      query->SQL->Clear() ;
      query->SQL->Add(sqlCmd) ;
      if (isSelect)
        query->Open() ;
      else
        query->ExecSQL() ;
    }
    * "Open" appelle probablement "Close" pour le ré-ouvrir, mais bon, c'est mieux de ne rien prendre pour acquis.

  4. #4
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    Bonjour,
    merci Guyt54
    le problème que j'ai rencontrée dans le résultat du code , en effet ce dernier filtre les données que par le jour et ne pas par toute la date.

  5. #5
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    Excuse-moi, faniette, j'avais mal compris la question , il reste que ton bug est dans la commande SQL et tu le verrais avec un "ShowMessage".

    Faut mettre les dates comme ça en SQL:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE Date <= '2012-02 bla bla'
    et non
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    WHERE Date <= 2012-02 bla bla
    ps: t'as vraiment un champ qui s'appelle "N°Ord"?. je suis surpris que ça passe en SQL, mais bon, on en apprend tous les jours.

  6. #6
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Oula Oula

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
     
    Date2 = DateTimePicker1->Date;
    Date3 = DateTimePicker2->Date;
    Date2 et 3 sont de type TDate et non pas des Ansitring ou Unicode String

    soit dans ta base c'est le format TDate qui est employé pour le champ date , soit si c'est un type string tu dois transformer ta valeur TDate en Valeur équivalente à ton Champ, La VCL offre beuacoup de possibilités pour ceci

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Form2->Table1->First();
    if(!Form2->Table1->Eof)
    ceci est parfaitement inutile car la requête Select se fait sur l'entier de la ou les tables mentionnées dans ta requëte


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
     Form2->Table1->Close();
      AnsiString a;
      a="select* FROM PEC  where Date <= " +Date3+" AND "+"Date >= " +Date2+" Order By N°Ord ASC" ;
      Form2->Query1->SQL->Clear();
      Form2->Query1->SQL->Add(a);
      Form2->Query1->ExecSQL();
      Form2->Table1->Open();
    lors d'une requête on utilise en principe la méthode open et non pas la méthode ExecSQL()
    si le mombre d'éléments retournés est grand il peut-être utile de préparer la commande SQL (->Prepare())

    N°Ord : n'est pas valide en SQL

    en espérant t'avoir été utile
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  7. #7
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    Étrange mélange entre Table1 et Query1 !!!

    il y a aussi les paramètres
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
      Form2->Query1->SQL->Text = "select * FROM PEC where Date <= :Date3 AND Date >= :Date2 Order By \"N°Ord\" ASC";
      Form2->Query1->ParamByName("Date2")->AsDate = DateTimePicker1->Date;
      Form2->Query1->ParamByName("Date3")->AsDate = DateTimePicker2->Date;
      Form2->Query1->Open();
    Il est vrai que 'N°Ord' comme nom de champ, faut essayé ", ' ou `, []
    selon la DB il servent à typer les chaines ou à forcer un nom de champ complexe
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  8. #8
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    En tout cas, je ne sais pas si fainette lit encore, mais sa question m'aura amené à préciser à une petite procédure de déverminage de requêtes SQL, à savoir:

    1) Mettre la commande SQL dans une string (par concaténation ou par un sprinf)

    2) Mettre la string dans un TEdit pour être capable de la copier facilement dans le presse-papier.

    3)Tester la commande avec un utilitaire de base de données, MySQL Browser par exemple.

    Si fainette se donnait la peine de faire cette procédure (ça prend une minute), elle verrait bien que son bug, il est dans la syntaxe de sa commande.

    Dommage que les balises "spoiler" n'existe pas, car je dirais à fainette de ne pas ouvrir le spoiler qui suit si elle n'aime pas la critique.

    Le spoiler:

    Je ne suis pas sûr que donner des noms de variables genre "Date1", "Date2", "Date3" aide à la compréhension du code. Je n'ai aucune idée de ce que tu veux faire, fainette et il est fort à parier que tu ne sauras même pas toi-même quand tu regarderas ton code dans quelques mois.

  9. #9
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    Bonjour,
    merci de vos réponse.
    malheureusement je nage toujours dans mon souci
    DjmSoftware:
    le type de mon champ Date est String


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    TDate Date2 = DateTimePicker1->Date;
    TDate Date3 = DateTimePicker2->Date;
    pour mettre la date entre des guillemets j'ai utilisé QuotedStr et pour transformer la valeur TDate en Valeur équivalente au Champ Date j'ai utiliser DateToStr mais tjr le même souci le code filtre les données que par le jour

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     AnsiString a;
      a="select* FROM PEC  where DateFac <= " +QuotedStr(DateToStr(DateFin))+" AND "+"DateFac >= " +QuotedStr(DateToStr(DateDebut)) ;

    concernant le spoiler de Guyt54 au contraire je l'ouvre avec plaisir, tes critiques sont des moyens pour que je puisse corriger mes erreurs.

  10. #10
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    fainette, excuses-moi d'insister, mais s'il te plait, mets ta commande dans un TEdit et copie la ici. Ton bug, on devrait le voir très clairement.

  11. #11
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Hello
    est tu certain que le format date retourné par DateToStr est equivalent a celui utilisé par ta base de donnée ?
    je te conseille d'utiliser le code fourni par ShaiLeTroll modifié pour ton usage

    il te faut au préalable créer les 2 paramètres dans ton composant Query, tu peux également les créer par 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
     
    try
    {
    SQLQuery1->Params->Clear();
    SQLQuery1->Params->AddParam(SQLQuery1->Params->CreateParam(ftString, "Date2", ptInput));
    SQLQuery1->Params->AddParam(SQLQuery1->Params->CreateParam(ftString, "Date3", ptInput)); 
    Query1->ParamByName("Date2")->AsAnsiString = QuotedStr(FormatDateTime("DD.MM.YYYY",DateTimePicker1->Date));
    Query1->ParamByName("Date3")->AsAnsiString = QuotedStr(FormatDateTime("DD.MM.YYYY",DateTimePicker2->Date));
    Query1->SQL->Text = "select * FROM PEC where Date <= :Date3 AND Date >= :Date2";
    Query1->Open();
    // ... ton code de traitement ici 
    }
    catch (Exception&E)
    {
      ShowMessage(E.Message); // pour les tests uniquement
    //... ton code de traitement d'exception
    }
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  12. #12
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    salut
    j'ai rencontrée une erreur de SQL général avec ce code
    j'ai utilisée ton astuce Guyt54 je la trouve formidable...


    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
     
    Query1->Params->Clear();
    Query1->Params->AddParam(Query1->Params->CreateParam(ftString, "DateD", ptInput));
    Query1->Params->AddParam(Query1->Params->CreateParam(ftString, "DateF", ptInput));
    Query1->ParamByName("DateD")->AsString = QuotedStr(FormatDateTime("DD/MM/YYYY",DateTimePicker1->Date));
    Query1->ParamByName("DateF")->AsString = QuotedStr(FormatDateTime("DD/MM/YYYY",DateTimePicker2->Date));
    Query1->SQL->Text = "select * FROM PEC where Date <= DateF AND Date >= DateD";
    //Query1->Open();
     
     
      AnsiString Res,b ;
     
     
      b="select* FROM PEC  where DateDevis <= DateF AND DateDevis >= DateD" ;
      Res.sprintf("1- [%s]",b) ;
      ShowMessage(Res) ;
    merci d'avance pour votre aide

  13. #13
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 081
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : France, Seine Saint Denis (Île de France)

    Informations professionnelles :
    Activité : Développeur C++\Delphi
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Juillet 2006
    Messages : 14 081
    Par défaut
    QuotedStr + ParamByName->AsString, cela me semble redondant, ça fonctionne ???
    le fait d'avoir un paramètre String va implicitement ajouter les '' (si j'ose vulgariser le mécanisme),
    c'est dans la tambouille des requêtes préparées, cela dépend du SGDB !
    J'ai vu que MySQL a été évoqué, mais je crois que Faniette travaille en ACCESS, ce qui peut apporter de nombreuses difficultés !

    j'aurais simplement écrit

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    Query1->SQL->Text = "select* FROM PEC  where DateDevis <= :DateF AND DateDevis >= :DateD";
    Query1->ParamByName("DateD")->AsString = FormatDateTime("DD/MM/YYYY",DateTimePicker1->Date);
    Query1->ParamByName("DateF")->AsString = FormatDateTime("DD/MM/YYYY",DateTimePicker2->Date);
    Query1->Open();
    ou via TQuery.ParamCheck
    Cela ne dispense pas de mettre les : pour indiquer un paramètre !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    Query1->ParamCheck = false;
    Query1->Params->Clear();
    Query1->Params->CreateParam(ftString, "DateD", ptInput);
    Query1->Params->CreateParam(ftString, "DateF", ptInput);
    Query1->ParamByName("DateD")->AsString = FormatDateTime("DD/MM/YYYY",DateTimePicker1->Date);
    Query1->ParamByName("DateF")->AsString = FormatDateTime("DD/MM/YYYY",DateTimePicker2->Date);
    Query1->SQL->Text = "select* FROM PEC  where DateDevis <= :DateF AND DateDevis >= :DateD";
    CreateParam ajoute le Param, inutile de faire un AddParam derrière !

    les paramètres étant typé ftString cela va gérer les " automatiquement (vilain amalgame mais on se comprend).
    En interne, les paramètres c'est optimisé dans le SGBD, c'est plus complexe qu'un simple ajout de "
    Surtout selon, le SGBD, c'est ' ou " le délimiteur de chaine !
    Aide via F1 - FAQ - Guide du développeur Delphi devant un problème - Pensez-y !
    Attention Troll Méchant !
    "Quand un homme a faim, mieux vaut lui apprendre à pêcher que de lui donner un poisson" Confucius
    Mieux vaut se taire et paraître idiot, Que l'ouvrir et de le confirmer !
    L'ignorance n'excuse pas la médiocrité !

    L'expérience, c'est le nom que chacun donne à ses erreurs. (Oscar Wilde)
    Il faut avoir le courage de se tromper et d'apprendre de ses erreurs

  14. #14
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    Si ça ne fonctionne pas, j'abandonne SQL:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    void __fastcall TForm3::Button1Click(TObject *Sender)
    {
      AnsiString cmd,date1,date2 ;
     
      date1 =  DateTimePicker1->Date.DateString() ;
      date2 =  DateTimePicker1->Date.DateString() ;
     
      cmd.sprintf("SELECT * FROM PEC WHERE (Date <='%s') AND (Date >= '%s')",
                  date1.c_str(),date2.c_str()) ;
     
      Edit1->Text = cmd ;
    }
    Commande résultante telle que vue dans TEdit1
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SELECT * FROM PEC WHERE (Date <='2012-05-09') AND (Date >= '2012-05-09')
    ps: pas sûr que c'est une bonne idée d'appeler un champs "Date", il y a une fonction SQL du même nom.

  15. #15
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Mot de commande et variable de meme nom = Erreur

  16. #16
    Membre expérimenté
    Homme Profil pro
    Enseignant
    Inscrit en
    Mars 2012
    Messages
    164
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Mars 2012
    Messages : 164
    Par défaut
    Citation Envoyé par blondelle Voir le message
    Mot de commande et variable de meme nom = Erreur
    y avait pas le caractère " `" qui permettait de contourner le problème?


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      SELECT  `Date` FROM  `select` WHERE bla bla
    mais bon, appeler un champs "Date", c'est chercher le trouble, faudrait peut-être faire plus d'efforts quant aux choix des noms des identificateurs...

  17. #17
    Rédacteur
    Avatar de blondelle
    Homme Profil pro
    Inscrit en
    Mars 2006
    Messages
    2 738
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 738
    Par défaut
    Tout a fait daccord avec toi Guyt54, de plus il pense que nous avons une boule de cristal, car son message d'erreur n'a meme pas ete poste, c'est le premier renseignement a avoir avec le code incrimine pour nous orienter afin de trouver le probleme

  18. #18
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Hello
    QuotedStr + ParamByName->AsString, cela me semble redondant, ça fonctionne ???
    le fait d'avoir un paramètre String va implicitement ajouter les '' (si j'ose vulgariser le mécanisme),
    c'est dans la tambouille des requêtes préparées, cela dépend du SGDB !
    J'ai vu que MySQL a été évoqué, mais je crois que Faniette travaille en ACCESS, ce qui peut apporter de nombreuses difficultés !
    Cela fonctionne parfaitement sur les SGDB compatible SQL92 ou le séparateur de chaine est une quote <'>
    CreateParam ajoute le Param, inutile de faire un AddParam derrière !
    Bien Vu

    AnsiString Res,b ;


    b="select* FROM PEC where DateDevis <= DateF AND DateDevis >= DateD" ;
    Res.sprintf("1- [%s]",b) ;
    ShowMessage(Res) ;
    inutile car avec un bloc Try Catch et ShowMessage ou Mieux OutputDebugString le message d'erreur complet est affiché dans le journal d'évenement et non seulement le predicat.

    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
     
    try
    {
    Query1->ParamCheck = false;
    Query1->Params->Clear();
    Query1->Params->CreateParam(ftString, "DateD", ptInput);
    Query1->Params->CreateParam(ftString, "DateF", ptInput);
    Query1->ParamByName("DateD")->AsString = FormatDateTime("DD/MM/YYYY",DateTimePicker1->Date);
    Query1->ParamByName("DateF")->AsString = FormatDateTime("DD/MM/YYYY",DateTimePicker2->Date);
    Query1->SQL->Text = "select* FROM PEC  where DateDevis <= :DateF AND DateDevis >= :DateD";
    Query1->Open();
    }
    catch(Exception &E)
    {
    AnsiString Msg=AnsiString("Predicat: ")+Query1->SQL->Text+AnsiString("Message d'erreur: ")+E.Message;
    OutputDebugString(Msg.c_str());
    }
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

  19. #19
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    salut chers développeurs
    en fin j'ai résolue mon problème, j'ai changée le type du champ de date par Date/Time au lieu text et j'ai exécutée ce code:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Form2->Query1->Params->Clear();
    Form2->Query1->Params->CreateParam(ftDate, "DateD", ptInput);
    Form2->Query1->Params->CreateParam(ftDate, "DateF", ptInput);
    Form2->Query1->ParamByName("DateD")->AsString = DateTimePicker1->Date;
    Form2->Query1->ParamByName("DateF")->AsString = DateTimePicker2->Date;
    Form2->Query1->SQL->Text = "select * FROM PEC where DateDevis <= :DateF AND DateDevis >= :DateD";
    Form2->Query1->Open();
    j'ai supprimée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Query1->ParamCheck = false;
    ça ma posé de problème, et je ne sais même pas qu'est ce qu'il signifié.

    merci beaucoup de vos solutions j'ai appris beaucoup de chose

    NB:/ j'ai ajoutée le champ N°Ord de type numérique sous access dans le code et sa fonctionné
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     Form2->Query1->SQL->Text = "select * FROM PEC where DateDevis <= :DateF AND DateDevis >= :DateD  Order By N°Ord";

  20. #20
    Membre Expert
    Avatar de DjmSoftware
    Homme Profil pro
    Responsable de compte
    Inscrit en
    Mars 2002
    Messages
    1 044
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Responsable de compte
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2002
    Messages : 1 044
    Billets dans le blog
    1
    Par défaut
    Hello
    fin j'ai résolue mon problème, j'ai changée le type du champ de date par Date/Time au lieu text et j'ai exécutée ce code:
    dans ce cas le code
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Form2->Query1->ParamByName("DateD")->AsString = DateTimePicker1->Date;
    Form2->Query1->ParamByName("DateF")->AsString = DateTimePicker2->Date;
    devient :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Form2->Query1->ParamByName("DateD")->AsDate = DateTimePicker1->Date;
    Form2->Query1->ParamByName("DateF")->AsDate = DateTimePicker2->Date;
    cdlt
    vous trouverez mes tutoriels à l'adresse suivante: http://djmsoftware.developpez.com/
    je vous en souhaite une excellente lecture ...

    A lire : Les règles du forum

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

Discussions similaires

  1. [WD17] Filtrer les données d'une colonne entre 2 dates (hfiltre en gros)
    Par franck34matlab dans le forum WinDev
    Réponses: 3
    Dernier message: 08/02/2015, 23h13
  2. SQL*Loader : filtrer les données chargées
    Par gattaca dans le forum Oracle
    Réponses: 2
    Dernier message: 13/07/2006, 09h51
  3. [Dates] Les mois entre deux dates
    Par kagura dans le forum Langage
    Réponses: 2
    Dernier message: 28/06/2006, 11h38
  4. comment transférer les données entre 2 pc?.
    Par unix27 dans le forum Administration
    Réponses: 12
    Dernier message: 10/04/2006, 07h48
  5. [JTABLE]trier et filtrer les données d'une jTable
    Par mehdi82 dans le forum Composants
    Réponses: 4
    Dernier message: 15/12/2005, 17h59

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