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. #21
    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
    @faniette, normalement, si tu as retiré ParamCheck alors CreateParam n'est pas utile, ceci est suffisant :

    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 = DateTimePicker1->Date;
    Query1->ParamByName("DateF")->AsString = DateTimePicker2->Date;
    Query1->Open();
    ou

    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")->AsDate = DateTimePicker1->Date;
    Query1->ParamByName("DateF")->AsDate = DateTimePicker2->Date;
    Query1->Open();
    l'ordre est important, d'abord SQL puis ParamByName !
    C'est l'affectation au SQL qui va créer automatiquement les Paramètres, puis le type est déterminé par AsString ou AsDate

    Donc, AsString est très important, car il type le paramètre en ftString !
    Cela fait appel au constructeur String(TDateTime) qui appelle automatiquement DateToStr !
    C'est effectivement utile si c'est un Champ Chaine, maintenant si tu es passé en Champ Date coté ACCESS comme le conseille DjmSotware, repasse à AsDate
    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

  2. #22
    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
    l'ordre est important, d'abord SQL puis ParamByName !
    C'est l'affectation au SQL qui va créer automatiquement les Paramètres, puis le type est déterminé par AsString ou AsDate

    Donc, AsString est très important, car il type le paramètre en ftString !
    Cela fait appel au constructeur String(TDateTime) qui appelle automatiquement DateToStr !
    Excellent j'ignorais cette subtilité
    ce composant est encore plus intelligent que je l'avais imaginé
    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

  3. #23
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    Bonjour tout le monde

    si je passe en AsDate j'aurai erreur SQL générale Format de date invalide (null)'

  4. #24
    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
    petite question ?
    Ta base est-elle de type Access
    si oui ton composant de requêtage est il un TAdoQUery
    fait le même essai avec la db bcdemos.mdb livrée avec C++ Builder (installée dans CommonFiles)
    dans le cas de composant TAdoQuery la syntaxe à employer est un peu différente

    tu peux tester le code ci-dessous avec la table employee qui contient également un champ de type Date/Heure
    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
     
     
    try
       {
    	   Query1->Close();
    	   Query1->Parameters->Clear();
    	   Query1->Parameters->CreateParameter("DateD",ftDate,pdInput,8,DateTimePicker1->Date);
    	   Query1->Parameters->CreateParameter("DateF",ftDate,pdInput,8,DateTimePicker2->Date);
    	   Query1->SQL->Text = "select* FROM Employee  where HireDate <= :DateF AND HireDate >= :DateD";
    	   Query1->Open();
       }
       catch(Exception&E)
       {
    	   AnsiString Msg=AnsiString("Predicat: ")+Query1->SQL->Text+AnsiString("Message d'erreur: ")+E.Message;
    	   OutputDebugString(Msg.c_str());
       }
    ce code est parfaitement fonctionnel avec le composant TAdoQuery
    tu n'auras plus qu'a adapter la requête
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Query1->SQL->Text = "select* FROM PEC  where DateDevis <= :DateF AND DateDevis >= :DateD";
    si cela ne fonctionne toujours pas je crais que ta base access soit défectueuse

    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

  5. #25
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    Bonjour
    ma base de données est de type Access et j'utilise BDE
    j'ai utilisée ce code avec la db bcdemos.mdb, il fonctionne trés bien avec la table employée:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Form2->Query1->SQL->Clear();
      Query1->SQL->Text = "select* FROM Employee  where HireDate <= :DateF AND HireDate >= :DateD";
     
    Form2->Query1->ParamByName("DateD")->AsDate =  DateTimePicker1->Date;
    Form2->Query1->ParamByName("DateF")->AsDate =  DateTimePicker2->Date;
    Form2->Query1->Open();
    qu'est ce que vous me conseillez. en plus ma BDD contient des données


  6. #26
    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
    Faniette
    si ta table est de type Access n'utilise pas le BDE mais plutôt les composants
    ADO ou dbGO selon la version de RadStudio
    puis essaye avec le code que je t'ai fournit
    si tu dispose d'access tu peux également tester le code SQL directement avec ACCESS

    Autre possibilité également pour tester la validité de ta base access
    dépose sur une fiche un Composant TAdoConnexion, Un TAdotable, un DbGRid,Tdatasource

    Renseigne la propriété connecion avec le fichier de base de donnée access(.mdb)avec fournisseur MicrosoftJet OLEDB 4 ou (accdb) avec fournisseur (Access office 12 ou supérieur)

    Active le composant AdoConnection (Connected =true)
    renseigne la propriété connection du composant TAdoTable avec ADOConnection1

    renseigne la propriété Table du composant TAdoTable avec le nom de ta table

    renseigne la propriété DataSource du composant TdbGrid avec DataSource1

    renseigne la propriété DataSet du composant TDatasource avec AdoTable1

    click droit sur le composant TAdoTAble , Editeur de champ + CTRL+F (Ajouter tous les Champs)
    vérifie que tous les types de champ correspondent bien avec la définition préalable de ta table ex: champ HireDate de la table employe est de type
    TDateTimeField

    Active le composant TAdoTable ta Grid devrait afficher la tous les champs de ta table et te permettre ainsi de vérifier le contenu
    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
    25
    26
    27
    28
    29
    30
     
    #ifndef Unit77H
    #define Unit77H
    //---------------------------------------------------------------------------
    #include <Classes.hpp>
    #include <Controls.hpp>
    #include <StdCtrls.hpp>
    #include <Forms.hpp>
    //---------------------------------------------------------------------------
    class TForm77 : public TForm
    {
    __published:	// Composants gérés par l'EDI
    	TDataSource *DataSource1;
    	TDBGrid *DBGrid1;
    	TADOConnection *ADOConnection1;
    	TADOTable *ADOTable1;
    	TIntegerField *ADOTable1EmpNo;
    	TWideStringField *ADOTable1LastName;
    	TWideStringField *ADOTable1FirstName;
    	TWideStringField *ADOTable1PhoneExt;
    	TDateTimeField *ADOTable1HireDate;
    	TFloatField *ADOTable1Salary;
    private:	// Déclarations utilisateur
    public:		// Déclarations utilisateur
    	__fastcall TForm77(TComponent* Owner);
    };
    //---------------------------------------------------------------------------
    extern PACKAGE TForm77 *Form77;
    //---------------------------------------------------------------------------
    #endif



    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

  7. #27
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    salut
    DjmSoftware
    j'ai testée la validité de la base access comme tu ma dit, heureusement elle n'est pas défectueuse
    en plus ton code fonctionne avec le composant ADOQuery1
    merci beaucoup tu ma sauvé.
    mon souci maintenant dans mon projet j'ai utilisée de le début jusqu’à la fin les composants de BDE. est ce que je peut mélanger les composants de ADO avec BDE dans la même application et j'ajoute que pour ce code le composant ADOQuery1 ?

  8. #28
    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
    Salut
    il est préférable que tu migres vers les composants ADO ou dbGO
    cela t'éviteras des problèmes de déployement de ton application et d'autre part BDE est en fin de vie
    la travail de migration ne devrait pas être ci-grand

    tu peux concentrer les composants d'accès et de requêtage sur un TDataModule (si tu ne la pas encore fait )ce qui te simplifiera considérablement la tâche

    bon courage
    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

  9. #29
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut
    Bonjour
    merci beaucoup DjmSoftware pour tes explications

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tu peux concentrer les composants d'accès et de requêtage sur un TDataModule (si tu ne la pas encore fait )ce qui te simplifiera considérablement la tâche

    j'ai aucune idée pour le moment je vais faire une recherche et je te tien au courant

  10. #30
    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 Faniette,

    le principe du Data Module est le suivant
    au lieu de déposer sur chaque fiche que ton promet utilise des composants de base de données , tu les concentre tous sur une Form Spéciale nommée TDatamodule
    ensuite chacune de tes form en incluant au préalable le .H du data module peut avoir un accès aux données de ta base

    Il existe un chapitre dans l'aide qui de donneras des informations détaillées à ce sujet

    des exemples sont également fournis dans la distribution de RadStudio

    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

  11. #31
    Membre éclairé
    Inscrit en
    Avril 2008
    Messages
    335
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 335
    Par défaut

    merci DjmSoftware tu ma beaucoup facilité les choses,

  12. #32
    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
    Pas de problème
    n'oublie pas de marquer ce Post Résolu
    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 2 sur 2 PremièrePremière 12

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