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 :

Problème d'affichage de date dans une base de donnée


Sujet :

C++Builder

  1. #1
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 084
    Points : 1 525
    Points
    1 525
    Billets dans le blog
    5
    Par défaut Problème d'affichage de date dans une base de donnée
    Salut

    J'ai une base de donnée ACCESS et j'ai créer une application base de données en utilisant BDE. Tout fonctionne bien sauf que:

    J'ai un champs qui me pose problème, c'est le champs heure.

    Je récupère sa valeur dans un TDBEdit pour la et il affiche:

    30/12/1899 17:31:28
    au lieu de
    17:31:28

    J'ai essayé de forcer les format et les type mais rien à faire.

    Quelqu'un aurait il une solution

  2. #2
    Membre chevronné
    Avatar de Crayon
    Inscrit en
    Avril 2005
    Messages
    1 811
    Détails du profil
    Informations personnelles :
    Localisation : Autre

    Informations forums :
    Inscription : Avril 2005
    Messages : 1 811
    Points : 2 189
    Points
    2 189
    Par défaut
    C'est normal car tu utilises sans doute un champ DateTime, donc la date et l'heure sont enregistré dans la BD.

    Tu n'a qu'à faire afficher le texte à partir du onzième caractère et tout devrais être beau .

  3. #3
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 084
    Points : 1 525
    Points
    1 525
    Billets dans le blog
    5
    Par défaut
    Citation Envoyé par Crayon
    C'est normal car tu utilises sans doute un champ DateTime, donc la date et l'heure sont enregistré dans la BD.

    Tu n'a qu'à faire afficher le texte à partir du onzième caractère et tout devrais être beau .
    Effectivement c'est un champs DateTime mais j'ai bien spécifié sous acces que ce champs est un champs heure au format HH:MM:SS ( bon c'est du microsoft on te dit que tu peu choisir en tre bleu et rouge et au final tu as du vert )

    Par contre je ne vois pas comment tu affiches seulement à partir du 11ème caractère dans un contrôle TDBEdit

  4. #4
    Membre expert
    Avatar de Sunchaser
    Homme Profil pro
    OPNI (Objet Programmant Non Identifié)
    Inscrit en
    Décembre 2004
    Messages
    2 059
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 53
    Localisation : France, Manche (Basse Normandie)

    Informations professionnelles :
    Activité : OPNI (Objet Programmant Non Identifié)
    Secteur : Industrie Pharmaceutique

    Informations forums :
    Inscription : Décembre 2004
    Messages : 2 059
    Points : 3 204
    Points
    3 204
    Par défaut
    Bonsoir,
    Dans un DBEdit effectivement, c'est pas très pratique.

    Néanmoins, tout dépends des objets que tu as a ta dispo pour la connexion a la table. Je viens de faire un petit test, mais pas sous Access (désolé ça me donne de l'urticaire), et si tu dispose d'un objet qui gère l'évènement OnDataChange comme un TDatasource par exemple, on devrais pouvoir traiter l'affichage.
    Un petit exemple donc, juste une proposition a tester dans ton cas, sous reserve surtout que cela soit applicable pour Access :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    void __fastcall TForm2::DataSource1DataChange(TObject *Sender, TField *Field)
    {
       if (DBEdit1->Field != NULL)
       {
            DBEdit1->Text = TimeOf(DBEdit1->Field->AsDateTime);
       }
    }
    (ne pas oublier alors d'inclure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <DateUtils.hpp>
    )

    En espérant t'aider,
    @ +

  5. #5
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 084
    Points : 1 525
    Points
    1 525
    Billets dans le blog
    5
    Par défaut
    Ton idée me semble pas mal d'autant plus que dans ce cas plutôt que d'utiliser un TDBEdit j'utiliserais un TDateTimePicker (c'est plus joli).

    Par contre si je surcharge le OnDatachange est ce que je doit remplir de la même manière tous les autres contrôles ? ou vont t'ils se remplirent automatiquement??

    PS moi aussi acces me donne de l'urticaire

  6. #6
    Nouveau membre du Club
    Inscrit en
    Avril 2007
    Messages
    43
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 43
    Points : 28
    Points
    28
    Par défaut
    Bon je suis en plein taf de projet de BTS qui consiste a faire dialoguer un prog en c++ (développé sous borland) avec une base de données ACCESS...
    Apparement, même si ton champ d'heure est précisé comme juste heure genre "hh:mm:ss", sous access, il te fout la date "30/12/1899" automatiquement quand tu récupère les infos sous builder alors qu'en visualisant sous access il t'affiche que l'heure...
    Pour résoudre à ça, dans une requéte, je fais:

    select format(Hour(ChampHeure),'00') & ':' & format(minute(ChampHeure),'00')& ':' & format(Seconde(ChampHeure),'00')
    AS [Heure]
    from MaTable

    Cela va m'afficher, dans un DBGrid, l'heure sous forme 17:31:00, ça tronque la date!!! Le résultat est donné dans un champ nommé "Heure" (d'ou le " AS [Heure]. En fait il lit le champ de la BDD, effectue l'opération de tronquage et affiche le résultat dans un nouveau champ appelé "Heure"

    Après, pour ton pb, je pense que en mettant ton DataSource (du DBEdit) sur le composant qui effectue la requete et le DataField sur le champ "Heure"

  7. #7
    Membre actif Avatar de Bily.sdi
    Profil pro
    Inscrit en
    Novembre 2005
    Messages
    208
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Novembre 2005
    Messages : 208
    Points : 206
    Points
    206
    Par défaut autre idée
    Salut a tous,

    les requettes sur la date pause parfois problem dans la syntaxe de la
    requete sql selon les BD

    tu prends la date et la convertis en style USA
    exemple :
    20070405 date du jours est plus grand que les dates passées "normalement"
    30012006 est plus grand que la date du jours et mais elle est ancienne

    la solution : je cree un champ numerique qui contient les date converties
    convertis en USA sans separateur, je me soucis plus des
    problems de syntaxe pour afficher des valeur se trouvant entre
    une date et une autre.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
      AnsiString DateInt;
      TDateTime dtPresent = Now();
      Word Year, Month, Day;
     
      DecodeDate(dtPresent, Year, Month, Day);
     
      DateInt = IntToStr(Year) + IntToStr(Month) + IntToStr(Day);
    Date = composant TDateTimePicke
    pour enregistrer la date dans ta bd en "JJ/MM/AAAA" si c'est configurer
    comme cela dans les parametres regionales du pc

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      D_SIGNED->Date  = Now();  // date du jours
     
      W_SIGNED->Text = WeekOfTheYear( D_SIGNED->Date ); // nr semaine
     
      Date.DateString();
    pour les heures uniquement :

    DecodeTime( dest , hr, mn, sec , mil);
    Date.TimeString()
    Date.DateTimeString()
    et aussi
    TimeToStr(Time());

    je suis sure que tu trouvera ta solution , bonne continuation

    @+

  8. #8
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 084
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 60
    Localisation : France, Loiret (Centre)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2003
    Messages : 1 084
    Points : 1 525
    Points
    1 525
    Billets dans le blog
    5
    Par défaut
    C'est cette solution qui semble être la meilleure et la plus efficace donc je l'ai adoptée


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
     
    void __fastcall TForm2::DataSource1DataChange(TObject *Sender, TField *Field)
    {
       if (DBEdit1->Field != NULL)
       {
            DBEdit1->Text = TimeOf(DBEdit1->Field->AsDateTime);
       }
    }
    (ne pas oublier alors d'inclure
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    #include <DateUtils.hpp>
    )

    Merci à sunchaser

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Débutant] Problème Insertion d'une date dans une base de donnée
    Par quiet dans le forum ASP.NET
    Réponses: 4
    Dernier message: 20/06/2014, 11h45
  2. Réponses: 1
    Dernier message: 11/01/2010, 13h46
  3. problème d'insertion des dates dans une base
    Par guy_antoine_mav dans le forum C#
    Réponses: 13
    Dernier message: 02/12/2009, 17h34
  4. enrégistrer un date dans une base de données Mysql 5
    Par Klemsy78 dans le forum Bases de données
    Réponses: 2
    Dernier message: 03/11/2009, 18h08
  5. [MySQL] Insérer une date dans une base de données
    Par agnaou dans le forum PHP & Base de données
    Réponses: 29
    Dernier message: 23/03/2009, 11h43

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