Bonjour,
Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?? car si j'ai par exemple: 31/06/2003 bien sur , car la
suite, ça plante..
j'utilise c++ Builder 6
exemple de mon code:
TDateTime date;
date= "valeur recupé dans le formlaire";
for (i=0;i<42;i++) //affichage des semaines dans la grille
{
StringGrid2->Cells[0][i] = date.FormatString("dd-mmm");
date=date+7;
}
Je recupere une date a partir d'une formulaire, mais comment vérifier si la date est corect?
mktime()
-- schtroumpf schtroumpf
Pierre Maurette
"Xav.M" typa:
Bonjour, Je recupere une date a partir d'une formulaire, mais comment vérifier si la date est corect?? car si j'ai par exemple: 31/06/2003 bien sur , car la suite, ça plante.. j'utilise c++ Builder 6 Votre question n'est donc pas posée sur le bon forum.
Je ne connais que des (très intéressants) groupes en anglais. Voir peut-être: borland.public.cppbuilder.vcl.components.using sur le serveur: newsgroups.borland.com
exemple de mon code: TDateTime date; date= "valeur recupé dans le formlaire";
for (i=0;i<42;i++) //affichage des semaines dans la grille { StringGrid2->Cells[0][i] = date.FormatString("dd-mmm"); dateÚte+7; } Ce que je ferais pour aller au plus vite:
(EditDate est le TEdit de saisie de la date dans le formulaire)
try { TDateTime TDT = TDateTime(EditDate->Text); } catch (EConvertError &exception) { // Traiter l'erreur. En général, retour au formulaire. ShowMessage("Mauvais format date"); }
Attention, il peut ne pas être évident pour l'utilisateur que son erreur vient du fait que le mois de juin ne compte que 30 jours.
Mais il y a mieux: - initialiser à une date valide et tester à chaque frappe (OnChange du TEdit). - Utiliser un TMaskEdit (je trouve que ça amène plutôt des contraintes, mais c'est personnel). - Utilisez un TDateTimePicker (palette "Win32"). Ça fait riche, c'est joli et facile mais je ne suis pas absolument certain que ça existe dans toutes les versions. -- Pierre
"Xav.M" <XavM@dada.com> typa:
Bonjour,
Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?? car si j'ai par exemple: 31/06/2003 bien sur , car la
suite, ça plante..
j'utilise c++ Builder 6
Votre question n'est donc pas posée sur le bon forum.
Je ne connais que des (très intéressants) groupes en anglais. Voir
peut-être:
borland.public.cppbuilder.vcl.components.using
sur le serveur:
newsgroups.borland.com
exemple de mon code:
TDateTime date;
date= "valeur recupé dans le formlaire";
for (i=0;i<42;i++) //affichage des semaines dans la grille
{
StringGrid2->Cells[0][i] = date.FormatString("dd-mmm");
dateÚte+7;
}
Ce que je ferais pour aller au plus vite:
(EditDate est le TEdit de saisie de la date dans le formulaire)
try
{
TDateTime TDT = TDateTime(EditDate->Text);
}
catch (EConvertError &exception)
{
// Traiter l'erreur. En général, retour au formulaire.
ShowMessage("Mauvais format date");
}
Attention, il peut ne pas être évident pour l'utilisateur que son
erreur vient du fait que le mois de juin ne compte que 30 jours.
Mais il y a mieux:
- initialiser à une date valide et tester à chaque frappe (OnChange du
TEdit).
- Utiliser un TMaskEdit (je trouve que ça amène plutôt des
contraintes, mais c'est personnel).
- Utilisez un TDateTimePicker (palette "Win32"). Ça fait riche, c'est
joli et facile mais je ne suis pas absolument certain que ça existe
dans toutes les versions.
--
Pierre
Bonjour, Je recupere une date a partir d'une formulaire, mais comment vérifier si la date est corect?? car si j'ai par exemple: 31/06/2003 bien sur , car la suite, ça plante.. j'utilise c++ Builder 6 Votre question n'est donc pas posée sur le bon forum.
Je ne connais que des (très intéressants) groupes en anglais. Voir peut-être: borland.public.cppbuilder.vcl.components.using sur le serveur: newsgroups.borland.com
exemple de mon code: TDateTime date; date= "valeur recupé dans le formlaire";
for (i=0;i<42;i++) //affichage des semaines dans la grille { StringGrid2->Cells[0][i] = date.FormatString("dd-mmm"); dateÚte+7; } Ce que je ferais pour aller au plus vite:
(EditDate est le TEdit de saisie de la date dans le formulaire)
try { TDateTime TDT = TDateTime(EditDate->Text); } catch (EConvertError &exception) { // Traiter l'erreur. En général, retour au formulaire. ShowMessage("Mauvais format date"); }
Attention, il peut ne pas être évident pour l'utilisateur que son erreur vient du fait que le mois de juin ne compte que 30 jours.
Mais il y a mieux: - initialiser à une date valide et tester à chaque frappe (OnChange du TEdit). - Utiliser un TMaskEdit (je trouve que ça amène plutôt des contraintes, mais c'est personnel). - Utilisez un TDateTimePicker (palette "Win32"). Ça fait riche, c'est joli et facile mais je ne suis pas absolument certain que ça existe dans toutes les versions. -- Pierre
Xav.M
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la forme d'une AnsiString... d'où l'erreur avec Mktime(): [C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en 'tm *'
"Fabien LE LEZ" a écrit dans le message de news:
On Mon, 14 Jun 2004 00:17:51 +0200, "Xav.M" :
Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?
mktime()
-- schtroumpf schtroumpf
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la
forme d'une AnsiString... d'où l'erreur avec Mktime():
[C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en
'tm *'
"Fabien LE LEZ" <gramster@gramster.com> a écrit dans le message de
news:fblpc09djmmkmtic9ldlg7tn9l5s7qk0uk@4ax.com...
On Mon, 14 Jun 2004 00:17:51 +0200, "Xav.M" <XavM@dada.com>:
Je recupere une date a partir d'une formulaire, mais comment vérifier si
la
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la forme d'une AnsiString... d'où l'erreur avec Mktime(): [C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en 'tm *'
"Fabien LE LEZ" a écrit dans le message de news:
On Mon, 14 Jun 2004 00:17:51 +0200, "Xav.M" :
Je recupere une date a partir d'une formulaire, mais comment vérifier si la
date est corect?
mktime()
-- schtroumpf schtroumpf
Martinez Jerome
Xav.M wrote:
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la forme d'une AnsiString... d'où l'erreur avec Mktime(): [C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en 'tm *'
Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou meme plein d'autres languages...) la : savoir que les valeurs retournées par des fonctions sont typées. A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc : AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier) dont on ne sait absolument pas la norme (jour/mois/annee? mois/jour/année? Voir la documentation de ton systeme d'exploitation pour connaitre la norme de celui-ci dependant de la localisation sans doute) en une suite d'entier (pour tm*)
Xav.M wrote:
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la
forme d'une AnsiString... d'où l'erreur avec Mktime():
[C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en
'tm *'
Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou
meme plein d'autres languages...) la : savoir que les valeurs retournées
par des fonctions sont typées.
A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc
: AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre
plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier)
dont on ne sait absolument pas la norme (jour/mois/annee?
mois/jour/année? Voir la documentation de ton systeme d'exploitation
pour connaitre la norme de celui-ci dependant de la localisation sans
doute) en une suite d'entier (pour tm*)
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la forme d'une AnsiString... d'où l'erreur avec Mktime(): [C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en 'tm *'
Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou meme plein d'autres languages...) la : savoir que les valeurs retournées par des fonctions sont typées. A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc : AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier) dont on ne sait absolument pas la norme (jour/mois/annee? mois/jour/année? Voir la documentation de ton systeme d'exploitation pour connaitre la norme de celui-ci dependant de la localisation sans doute) en une suite d'entier (pour tm*)
Pierre Maurette
Pierre Maurette typa: [...]
try { TDateTime TDT = TDateTime(EditDate->Text); } catch (EConvertError &exception) { // Traiter l'erreur. En général, retour au formulaire. ShowMessage("Mauvais format date"); } J'oubliais un truc important si vous n'avez pas l'habitude: si vous
testez "normalement" votre programme à partir de l'EDI de C++ Builder 6, vous aurez l'impression que "ça plante", comme vous dites. En réalité, il vous suffit d'acquiter ("OK") la fenêtre de l'exception du débogueur et de relancer par F9 ou de mieux de tester hors de l'EDI en lançant directement l'exe. Si votre question est uniquement de savoir si la date est valide, comme vous l'écriviez, faites: dans le Unit1.h, ou autre nom : ... private: // Déclarations de l'utilisateur bool __fastcall IsMyDateValid(AnsiString s); ...
dans le Unit1.c, ou autre nom : //--------------------------------------------------------------------------- bool __fastcall TForm1::IsMyDateValid(AnsiString s) { bool Result = true; try { TDateTime TDT = TDateTime(s); } catch (EConvertError &exception) { Result = false; } return Result; } //---------------------------------------------------------------------------
Et pour tester, par exemple dans un gestionnaire d'évènement: //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(IsMyDateValid(Edit3->Text)) { Edit1->Text = "Date correcte"; } else { Edit1->Text = "Date incorrecte"; } } //--------------------------------------------------------------------------- -- Pierre
Pierre Maurette <maurette.pierre@free.fr> typa:
[...]
try
{
TDateTime TDT = TDateTime(EditDate->Text);
}
catch (EConvertError &exception)
{
// Traiter l'erreur. En général, retour au formulaire.
ShowMessage("Mauvais format date");
}
J'oubliais un truc important si vous n'avez pas l'habitude: si vous
testez "normalement" votre programme à partir de l'EDI de C++ Builder
6, vous aurez l'impression que "ça plante", comme vous dites. En
réalité, il vous suffit d'acquiter ("OK") la fenêtre de l'exception du
débogueur et de relancer par F9 ou de mieux de tester hors de l'EDI en
lançant directement l'exe.
Si votre question est uniquement de savoir si la date est valide,
comme vous l'écriviez, faites:
dans le Unit1.h, ou autre nom :
...
private: // Déclarations de l'utilisateur
bool __fastcall IsMyDateValid(AnsiString s);
...
dans le Unit1.c, ou autre nom :
//---------------------------------------------------------------------------
bool __fastcall TForm1::IsMyDateValid(AnsiString s)
{
bool Result = true;
try
{
TDateTime TDT = TDateTime(s);
}
catch (EConvertError &exception)
{
Result = false;
}
return Result;
}
//---------------------------------------------------------------------------
Et pour tester, par exemple dans un gestionnaire d'évènement:
//---------------------------------------------------------------------------
void __fastcall TForm1::Button1Click(TObject *Sender)
{
if(IsMyDateValid(Edit3->Text))
{
Edit1->Text = "Date correcte";
}
else
{
Edit1->Text = "Date incorrecte";
}
}
//---------------------------------------------------------------------------
--
Pierre
try { TDateTime TDT = TDateTime(EditDate->Text); } catch (EConvertError &exception) { // Traiter l'erreur. En général, retour au formulaire. ShowMessage("Mauvais format date"); } J'oubliais un truc important si vous n'avez pas l'habitude: si vous
testez "normalement" votre programme à partir de l'EDI de C++ Builder 6, vous aurez l'impression que "ça plante", comme vous dites. En réalité, il vous suffit d'acquiter ("OK") la fenêtre de l'exception du débogueur et de relancer par F9 ou de mieux de tester hors de l'EDI en lançant directement l'exe. Si votre question est uniquement de savoir si la date est valide, comme vous l'écriviez, faites: dans le Unit1.h, ou autre nom : ... private: // Déclarations de l'utilisateur bool __fastcall IsMyDateValid(AnsiString s); ...
dans le Unit1.c, ou autre nom : //--------------------------------------------------------------------------- bool __fastcall TForm1::IsMyDateValid(AnsiString s) { bool Result = true; try { TDateTime TDT = TDateTime(s); } catch (EConvertError &exception) { Result = false; } return Result; } //---------------------------------------------------------------------------
Et pour tester, par exemple dans un gestionnaire d'évènement: //--------------------------------------------------------------------------- void __fastcall TForm1::Button1Click(TObject *Sender) { if(IsMyDateValid(Edit3->Text)) { Edit1->Text = "Date correcte"; } else { Edit1->Text = "Date incorrecte"; } } //--------------------------------------------------------------------------- -- Pierre
Xav.M
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien mieux!!! encore merci "Martinez Jerome" a écrit dans le message de news:cak44i$
Xav.M wrote:
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la
forme d'une AnsiString... d'où l'erreur avec Mktime(): [C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en
'tm *'
Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou meme plein d'autres languages...) la : savoir que les valeurs retournées par des fonctions sont typées. A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc : AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier) dont on ne sait absolument pas la norme (jour/mois/annee? mois/jour/année? Voir la documentation de ton systeme d'exploitation pour connaitre la norme de celui-ci dependant de la localisation sans doute) en une suite d'entier (pour tm*)
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien
mieux!!!
encore merci
"Martinez Jerome" <jerome.martinez@aenlever-orangefrance.com.invalid> a
écrit dans le message de news:cak44i$ru61@news.rd.francetelecom.fr...
Xav.M wrote:
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous
la
forme d'une AnsiString... d'où l'erreur avec Mktime():
[C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString'
en
'tm *'
Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou
meme plein d'autres languages...) la : savoir que les valeurs retournées
par des fonctions sont typées.
A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc
: AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre
plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier)
dont on ne sait absolument pas la norme (jour/mois/annee?
mois/jour/année? Voir la documentation de ton systeme d'exploitation
pour connaitre la norme de celui-ci dependant de la localisation sans
doute) en une suite d'entier (pour tm*)
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien mieux!!! encore merci "Martinez Jerome" a écrit dans le message de news:cak44i$
Xav.M wrote:
Ok ok, merci... mais le probleme que j'ai là, c'est que je reçois sous la
forme d'une AnsiString... d'où l'erreur avec Mktime(): [C++ Erreur] Unit6.cpp(29): E2034 Impossible de convertir 'AnsiString' en
'tm *'
Sans vouloir etre mechant, il s'agit de la base du C++ (ou meme Java, ou meme plein d'autres languages...) la : savoir que les valeurs retournées par des fonctions sont typées. A toi de convertir un AnsiString (propriétaire Borland, donc lit la doc : AnsiString.c_str() permet de retrouver un const char*, c'est peut-etre plus pratique. atoi(), meme si c'et pas C++, permet d'avoir un entier) dont on ne sait absolument pas la norme (jour/mois/annee? mois/jour/année? Voir la documentation de ton systeme d'exploitation pour connaitre la norme de celui-ci dependant de la localisation sans doute) en une suite d'entier (pour tm*)
Fabien LE LEZ
On Mon, 14 Jun 2004 19:00:15 +0200, "Xav.M" :
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien mieux!!! encore merci "Martinez Jerome" a écrit dans le message de news:cak44i$
A lire d'urgence[*] : <http://www.giromini.org/usenet-fr/repondre.html>
[*] "d'urgence", ça veut dire : "Merci de ne pas poster sur Usenet avant d'avoir lu complètement et sérieusement le document en question"
-- schtroumpf schtroumpf
On Mon, 14 Jun 2004 19:00:15 +0200, "Xav.M" <XavM@dada.com>:
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien
mieux!!!
encore merci
"Martinez Jerome" <jerome.martinez@aenlever-orangefrance.com.invalid> a
écrit dans le message de news:cak44i$ru61@news.rd.francetelecom.fr...
A lire d'urgence[*] :
<http://www.giromini.org/usenet-fr/repondre.html>
[*] "d'urgence", ça veut dire : "Merci de ne pas poster sur Usenet
avant d'avoir lu complètement et sérieusement le document en question"
C'est bon, j'ai pris le calendrier tout fait, c'est vrai que c'est bien mieux!!! encore merci "Martinez Jerome" a écrit dans le message de news:cak44i$
A lire d'urgence[*] : <http://www.giromini.org/usenet-fr/repondre.html>
[*] "d'urgence", ça veut dire : "Merci de ne pas poster sur Usenet avant d'avoir lu complètement et sérieusement le document en question"