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 076
    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 076
    Points : 1 521
    Points
    1 521
    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
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  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 .
    • Plus un ordinateur possède de RAM, plus vite il peut générer un message d'erreur. - Dave Barry
    • Je n'ai pas peur des ordinateurs. J'ai peur qu'ils viennent à nous manquer. - Isaac Asimov
    • Le code source est comme une belle femme, plus on le regarde, plus on trouve des défauts. - Crayon

  3. #3
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    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 076
    Points : 1 521
    Points
    1 521
    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
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  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,
    @ +
    Aux persévérants aucune route n'est interdite.
    Celui qui ne sait pas se contenter de peu ne sera jamais content de rien.
    Current Status
    Avec 40% de pollinisateurs invertébrés menacés d'extinction selon les Nations Unies, l'homme risque fort de passer de la monoculture à la mono diète...
    Faîtes quelque chose de bien avec vos petits sous: Enfants du Mekong

  5. #5
    Membre expérimenté
    Avatar de Gouyon
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Novembre 2003
    Messages
    1 076
    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 076
    Points : 1 521
    Points
    1 521
    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
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

  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 076
    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 076
    Points : 1 521
    Points
    1 521
    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
    Il y a des jours où j'éprouve une haine profonde envers microsoft et Apple c'est pas mieux
    Mon modeste site et mes modestes oeuvres sont
    Rémi

+ 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, 12h45
  2. Réponses: 1
    Dernier message: 11/01/2010, 14h46
  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, 18h34
  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, 19h08
  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, 12h43

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