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

 Delphi Discussion :

Comment tester la validité d'une date dans un dbEdit ?


Sujet :

Delphi

  1. #1
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut Comment tester la validité d'une date dans un dbEdit ?
    Salut.

    Le DataField de dbEdit1 contient une date. J'utilise la propriété EditMask pour formater la date.

    Le problème est lorsqu'on saisie un chiffre supérieur à 30,31 pour le jour ou supérieur à 12 pour le mois, je provoque une Classe d'Exeption EconvertError.

    Les évènements 'Before' ne me permettent pas de tester un champ seul, ils concernent tout l'enregistrement.

    Comment tester directement la validité d'une date sans passer par un Edit1.Text qu'on insère dans la Table après validation par un Try ou TryStrToDate

    Merci.

  2. #2
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 037
    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 037
    Points : 40 941
    Points
    40 941
    Billets dans le blog
    62
    Par défaut
    pourquoi ne pas utiliser un composant existant , au débotté :

    dans la JVCL : TjvDBDateEdit ou TjvDBDateTimePicker
    dans SmComponent TDBEditTyped
    avec D3 j'utilise la RXlib : RxDBDateEdit
    ou aussi DBEzdateEdit (je ne me rappelle plus d'où il vient celui-ci )

    Bref ceci pour dire qu'il existe bien un composant gratuit (au moins les 3 premiers) qui fera ce que tu cherches , tout dépend de ta version de Delphi
    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

  3. #3
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par SergioMaster Voir le message
    pourquoi ne pas utiliser un composant existant , au débotté :

    dans la JVCL : TjvDBDateEdit ou TjvDBDateTimePicker
    dans SmComponent TDBEditTyped
    avec D3 j'utilise la RXlib : RxDBDateEdit
    ou aussi DBEzdateEdit (je ne me rappelle plus d'où il vient celui-ci )

    Bref ceci pour dire qu'il existe bien un composant gratuit (au moins les 3 premiers) qui fera ce que tu cherches , tout dépend de ta version de Delphi
    J'utilise Delphi 7 Entreprise

    Comment poser sur ma fiche TjvDBDateEdit , TjvDBDateTimePicker ou RxDBDateEdit
    STP
    Merci

  4. #4
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    Installer le package nécessaire,

    il existe aussi en standard le TDateTimePicker qui fourni obligatoirement une date ...

    sinon

    ajouter dans le OnBeforePost, un TryStrToDate(Edit.Text) et déclenché un Abort, voir l'aide !
    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

  5. #5
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation ShaiLeTroll
    Installer le package nécessaire,
    Je n'ose pas dire comment faire car tu me donnerez la réponse de Rayek à alexF le 10/01/2007 qui s'est heurté au même Problème. La réponse était
    Developpez ne se limite pas qu'au forum
    Aussi pourrais-tu m'indiquer un tutoriel qui me permette d'installer le package necessaire.

  6. #6
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    Ben, euh, tu télécharge le projet sur Jedi par exemple, puis tu lance install.bat, et ça se fait tout seul, pour cette lib c'est très simple !

    sinon, il faut compiler et installer un fichier DPK, je ne vois rien de plus à dire ...

    Sinon, j'ai donné une solution sans Lib, ... pourquoi ne pas l'essayer avant ?
    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

  7. #7
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    ajouter dans le OnBeforePost, un TryStrToDate(Edit.Text) et déclenché un Abort, voir l'aide !
    Cela suppose au lieu de travailler avec le Composant DBEdit on travaille avec le composant Edit. Tester avec TryStrToDate et rajouter un bouton de validation (pour inclure la date si elle est correcte).

    Si c'est le cas je sais le faire. Je voulais rester dans la logique d'utilisation de DBNavigator pour la validation.

    J'ai commencé à fouiner dans la FAQ : http://atlantis.developpez.com/flash/icomposant/
    pour installer un nouveau composant.

  8. #8
    Membre habitué
    Profil pro
    Inscrit en
    Août 2006
    Messages
    185
    Détails du profil
    Informations personnelles :
    Âge : 48
    Localisation : Belgique

    Informations forums :
    Inscription : Août 2006
    Messages : 185
    Points : 192
    Points
    192
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Comme dit ShaiLeTroll :
    il existe aussi en standard le TDateTimePicker qui fourni obligatoirement une date ...
    Pq se compliquer la vie, cette objet se trouve dans l'onglet win32. Pour débuter c'est largement suffisant.
    Tu peux le faire, tu veux le faire tu vas le faire Bref, soyons positif

  9. #9
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par dd_garion Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    Comme dit ShaiLeTroll :
    il existe aussi en standard le TDateTimePicker qui fourni obligatoirement une date ...
    Pq se compliquer la vie, cette objet se trouve dans l'onglet win32. Pour débuter c'est largement suffisant.
    Je crois que je me suis fait mal comprendre.

    La discution que j'ai introduite vient après la discussion introduite par souminet
    Comment tester la validité d'une date dans un Edit
    Là il a été suggéré d'utiliser TryStrtoDate soit TdateTimePicker

    Cela je l'ai parfaitement maîtrisé. A la Place de TEdit j'ai ultilisé TdateTimePicker et je vérififie la validité de la saisie d'une date.

    Maintenant je suis dans une application où j'ai une table contenant un champ date un DBGrid un DBNavigator et un DBEdit (reprenant le dit champ date avec EditMask pour formater la date) et je fais soit une insertion ou un Edit avec DBNavigator, lorsque je saisis une date erronée avac DBEdit le déclenche une classe d'exception

    Je joins le code avec lequel je travaille où j'ai rajouté la recherche d'un enregistrement avec TDateTimePicker

    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
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    unit Unit1;
     
    interface
     
    uses
      Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
      Dialogs, StdCtrls, ExtCtrls, DBCtrls, Mask, Grids, DBGrids, DB, DBTables,
      Buttons, ComCtrls,DateUtils;
     
    type
      TForm1 = class(TForm)
        Table1: TTable;
        DataSource1: TDataSource;
        DBGrid1: TDBGrid;
        DBEdit1: TDBEdit;
        DBNavigator1: TDBNavigator;
        Label2: TLabel;
        Table1DatJour: TDateField;
        Table1JourSemaine: TStringField;
        DateTimePickerRech: TDateTimePicker;
        BitBtn1: TBitBtn;
        Label3: TLabel;
        procedure BitBtn1Click(Sender: TObject);
      private
        { Déclarations privées }
      public
        { Déclarations publiques }
      end;
     
    var
      Form1: TForm1;
     
    implementation
     
    {$R *.dfm}
     
    procedure TForm1.BitBtn1Click(Sender: TObject);
    begin
     
    Table1.locate('DatJour',DateToStr(DateOf(DateTimePickerRech.Date)),[loPartialKey]);
     
    end;
     
    end.

  10. #10
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 453
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 453
    Points : 24 864
    Points
    24 864
    Par défaut
    Etrange pour le locate ... si 'DatJour' est un champ date, ceci suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.locate('DatJour', DateTimePickerRech.Date),[])
    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

  11. #11
    Membre régulier
    Inscrit en
    Avril 2008
    Messages
    167
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 167
    Points : 89
    Points
    89
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Etrange pour le locate ... si 'DatJour' est un champ date, ceci suffit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.locate('DatJour', DateTimePickerRech.Date),[])
    Exact ça marche aussi. Autant utiliser le plus simple.

    Mon problème reste entier pour l'utilisation de DBEdit. Je vais piocher la question dans
    http://www.developpez.com/delphi/faq...osantinterface
    http://atlantis.developpez.com/flash/icomposant/
    et
    http://www.developpez.net/forums/sho...d.php?t=261445

    pour voir comment tirer dans la JVCL : TjvDBDateEdit ou TjvDBDateTimePicker

    Merci

Discussions similaires

  1. [VB.NET] Comment tester la validité d'une date ?
    Par Zefree dans le forum ASP.NET
    Réponses: 5
    Dernier message: 15/12/2012, 15h49
  2. [Dates] comment vérifier la validité d'une date en php
    Par cortex024 dans le forum Langage
    Réponses: 6
    Dernier message: 07/02/2007, 09h46
  3. Comment fait-on pour insérer une date dans un champs DateTime
    Par gibea00 dans le forum Accès aux données
    Réponses: 1
    Dernier message: 14/01/2007, 01h04
  4. Réponses: 1
    Dernier message: 23/11/2006, 14h02
  5. Comment tester la validité d'une adresse mail
    Par jmoez dans le forum Oracle
    Réponses: 1
    Dernier message: 19/04/2006, 13h00

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