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 :

date de...a dans un champ string


Sujet :

Bases de données Delphi

  1. #1
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut date de...a dans un champ string
    Hello,

    J'ai une table paradox qui contient (entre autre) un champs de type A qui contient des dates au format J/MM/AAAA. Ce champs n'est pas indexé. (ca doit resté des strings).

    Je voudrais que le programme puisse imprimer certains champs de tous les enregistrements entre telle et telle date.

    Imaginons que j'ai dans ma table :

    12/07/2003 theatre diner de con 20h30
    19/07/2003 concert G.Javres 20h30
    explo cycle
    3/08/2003 theatre art 20h30
    11/08/2003 conf politique 16h00

    Je choisis d'imprimer du 15/07/2003 au 10/08/2003 et du coup le programme m'imprime :

    19/07/2003 concert G.Javres 20h30
    3/08/2003 theatre art 20h30

  2. #2
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Si tu essaye de convertir ta String en Date avec SQL
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Select CAST(ChampsString AS DATE) as MaDate,.. From MaTable
    Where CAST(ChampsString AS DATE) >= :DU and
    Where CAST(ChampsString AS DATE) <= :AU
    Ou bien tu peut utiliser l'événement fabuleux des tables : OnFilterRecord
    qui a comme argument Accept de type Boolean
    Ex:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Accept := (StrToDate(ChampsString) >= Du) and 
    (StrToDate(ChampsString) >= Au);
    où Du et au sont de type Date.

    pour rafraichir tu met simplement
    MaTable.Filter := False;
    MaTable.Filter := True;
    Mais cet événement et un peu lent avec les grandes quantités de données.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  3. #3
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut l'événement fabuleux des tables : OnFilterRecord
    Je suis assez interessé par la solution on filterrecord y a t'il des tuto quelque part qui mettent en oeuvre cette technique ?

    Je ne comprends pas la commande
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Accept := (StrToDate(ChampsString) >= Du) and 
    (StrToDate(ChampsString) >= Au);
    En fait sur ma form j'ai une DBGrid et je voudrais que n'apparaissent plus dedans que les rec des dates située dans la période que je détermine, c'est en vue d'imprimer cette liste ensuite.

    Jusqu'ici je faisais toujours des recherches sur 1 résultat en remplisant la case filter et en mettant filtered a true, mais la ca peut pas marcher...

  4. #4
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Accept est de type boolean

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Accept := (StrToDate(ChampsString) >= Du) and 
    (StrToDate(ChampsString) <= Au);
    Veux dire que seul les enregistrements qui réponde à l'expression
    (StrToDate(ChampsString) >= Du) et (StrToDate(ChampsString) <= Au)
    vont apparaitre dans ta grille.

    Dans ton cas qu'est ce que tu va faire c'est seulement une simple proposition :
    Deux MaskEdit : MaskEdit1 et MaskEdit2 avec un masque de Date et un boutton devant
    On rempli les deux Date dans les maskEdit et au click du boutton tu écris :
    MaTable.Filtered := False;
    MaTable.Filtered := True;
    et dans l'événement OnFilterRecord de la table tu écris :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Accept := (StrToDate(MonChampsString) >= StrToDate(MaskEdit1.Text) and (StrToDate(MonChampsString) <= MaskEdit2.Text);
    Tu as aussi un lien http://delphipage.free.fr/bdefiltres.html mais je trouve c'est maigre comme explication.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

  5. #5
    Membre averti
    Homme Profil pro
    aux études mais 40 ans
    Inscrit en
    Juin 2004
    Messages
    2 016
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : aux études mais 40 ans

    Informations forums :
    Inscription : Juin 2004
    Messages : 2 016
    Points : 308
    Points
    308
    Par défaut la lumiere....
    Je crois que je commence à comprendre.

    Accept recoit une valeur qui lui dit si la date est supérieure ou egale à ce qui est dans maskedit1 et inférieure ou égale à ce qui est dans maskedit2

    Et l'event onfilterrecord se base la dessu pour afficher ou pas les rec dans la grille.

    C'est bien ca ?

  6. #6
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 593
    Points
    593
    Par défaut
    Exactement
    A chaque fois qu'un enregistrement va s'afficher l'expression affectée à Accept est testée si l'enregistrement répond aux critères de l'expression il est affiché sinon il ne l'est pas.
    <On fait la science avec des faits, comme on fait une maison avec des pierres : mais une accumulation de faits n'est pas plus une science qu'un tas de pierres n'est une maison> **Poincaré**

Discussions similaires

  1. Date par defaut dans un champs
    Par AMBOWE dans le forum Langage SQL
    Réponses: 6
    Dernier message: 08/06/2007, 16h39
  2. [MySQL] Faire un INSERT d'une date format Francais dans un champ date '0000-00-00' ?
    Par bilou95 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 20/11/2006, 13h49
  3. [DATE]date par défaut dans un champ
    Par fabszn dans le forum DB2
    Réponses: 2
    Dernier message: 20/10/2006, 09h05
  4. afficher la date du jour dans un champ date
    Par pierrot67 dans le forum Bases de données
    Réponses: 1
    Dernier message: 14/03/2006, 21h32
  5. [XSD] : Garder les espaces dans un champ string
    Par cvacavant dans le forum Valider
    Réponses: 8
    Dernier message: 10/02/2006, 09h28

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