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 :

filtrage d'une table par date


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Juillet 2011
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 5
    Points : 7
    Points
    7
    Par défaut filtrage d'une table par date
    salut tout le monde
    j'ai une table facture qui contient un champs de type date , sachant d'abord que j'utilise delphi 7 et paradox comme SGBD, je voulais faire un filtre à ma table selon seulement l'année de la date, j'ai utilisé pour cela un composant DateTimePicker
    et j'ai mis sa propriété datemode en dmUpDown et sa propriété format affiche uniquement l'année. je voulais lorsque je clique sur mon datetimepicker , en Up ou en Down , il filtrera ma table en affichant seulement les factures de l'année désirée.
    merci pour tout d'avance

  2. #2
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    Bonjour,
    ajouter ce code dans l’évènement OnChange de DateTimePicker1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with tableFacture do
        begin
        Filtered:=false;
        Filter:='[dateFacture]='+quotedstr(datetostr(DateTimePicker1.Date));
        Filtered:=true;
        end;

  3. #3
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 036
    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 036
    Points : 40 942
    Points
    40 942
    Billets dans le blog
    62
    Par défaut
    c'est là où les filtres sur Dataset ont leurs limites je pense

    à essayer
    Code non testé : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    var aa,mm,jj : Integer;
    begin
    Decodedate(Datetimepicker1.Date,aa,mm,jj)
    with tableFacture do
        begin
        Filtered:=false;
        Filter:='EXTRACT(YEAR FROM DATEFACTURE)='+inttostr(aa);
        Filtered:=true;
        end;
    end;

    comme toujours cependant je recommanderais un TQuery plutôt qu'un TTable avec Filtre
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    SELECT * FROM MATABLE
    WHERE EXTRACT(YEAR FROM DATEFACTURE)=:AA
    et un code du genre (toujours l'évènement onchange du datetimePicker)
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    var aa,mm,jj : Integer;
    begin
    Decodedate(Datetimepicker1.Date,aa,mm,jj)
    With QueryTableFacture do
      begin
        Active:=False;
        ParambyName('AA').asInteger:=aa;
       Active:=True;
      end;
    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

  4. #4
    Membre du Club
    Inscrit en
    Décembre 2007
    Messages
    246
    Détails du profil
    Informations forums :
    Inscription : Décembre 2007
    Messages : 246
    Points : 62
    Points
    62
    Par défaut
    Le code précédent filtre la date avec jour et mois
    with tableFacture do
    begin
    Filtered:=false;
    Filter:='[dateFacture]='+quotedstr(datetostr(DateTimePicker1.Date));
    Filtered:=true;
    end;
    mais pour filtrer que l'année on doit prendre les dates entre début de l'année et la fin (01-01-yyyy et 31-12-yyyy)
    modifier le format de la date et son séparateur au lancement du programme dans l'évènement OnCreate:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    dateseparator:='-';
    shortdateformat:='dd/mm/yyyy';
    ajouter DateUtils dans USES où la fonction YearOF est définie

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    uses ........, DateUtils, ......;
    dans l'évènement OnChange de DateTimePicker1:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with tableFacture do
        begin
        Filtered:=false;
        Filter:='[dateFacture]>='+quotedstr('01-01-' + inttostr(yearof(DateTimePicker1.Date)))+ 'and ' +'[dateFacture]<='+quotedstr('31-12-' + inttostr(yearof(DateTimePicker1.Date)));
        Filtered:=true;
        end;

  5. #5
    Membre actif
    Inscrit en
    Décembre 2004
    Messages
    390
    Détails du profil
    Informations forums :
    Inscription : Décembre 2004
    Messages : 390
    Points : 288
    Points
    288
    Par défaut
    J'aurai utilisé l'evenement OnFilterRecord comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Accept := YearOf(DataSet.FieldByName('DATEFACTURE').AsDateTime) =
                        YearOf(DateTimePicker1.Date);
    et dans l'evenement OnChange du TimePicker

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      tableFacture.Refresh;

  6. #6
    Futur Membre du Club
    Inscrit en
    Mai 2008
    Messages
    4
    Détails du profil
    Informations forums :
    Inscription : Mai 2008
    Messages : 4
    Points : 7
    Points
    7
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with tableFacture do
        begin
        Filtered:=false;
        Filter:='dateFacture=>01/01/'+quotedstr(datetostr(DateTimePicker1.Date)+'   AND [dateFacture]=<31/12/'+quotedstr(datetostr(DateTimePicker1.Date));
        Filtered:=true;
        end;

  7. #7
    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
    Citation Envoyé par chikh_karkar Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    with tableFacture do
        begin
        Filtered:=false;
        Filter:='dateFacture=>01/01/'+quotedstr(datetostr(DateTimePicker1.Date)+'   AND [dateFacture]=<31/12/'+quotedstr(datetostr(DateTimePicker1.Date));
        Filtered:=true;
        end;
    Réponse déjà fournit plus haut.

    Sinon simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    with tableFacture do
        begin
        Filtered:=false;
        Filter:='Year(dateFacture)=' + YearOf(DateTimePicker1.Date);
        Filtered:=true;
        end;
    Normalement la fonction Year (SQL 92) fonctionne dans les filtres
    Modérateur Delphi

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

Discussions similaires

  1. Filtrage d'une table par Date DD/MM/YY
    Par Piloumi dans le forum SQL
    Réponses: 3
    Dernier message: 26/03/2015, 17h00
  2. [MySQL] Afficher les données de plusieurs tables par date en une seule liste.
    Par Romanodi13 dans le forum PHP & Base de données
    Réponses: 22
    Dernier message: 08/09/2011, 21h45
  3. Réponses: 3
    Dernier message: 06/09/2010, 16h22
  4. Réponses: 1
    Dernier message: 22/10/2008, 18h08
  5. Extraire données d'une table par date
    Par Hombe dans le forum Langage SQL
    Réponses: 7
    Dernier message: 08/11/2006, 23h03

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