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

Composants VCL Delphi Discussion :

TDateTimePicker et base de données


Sujet :

Composants VCL Delphi

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut TDateTimePicker et base de données
    Bonjour,

    J'utilise actuellement un composant TDatimePickerdont la propriété Kind est sur Time. Je souhaite intégrer la valeur de ce composant dans ma base de données, le champ d'accueil étant en format smalldate time.

    Je procède ainsi :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     timetostr(self.TimepickerReception.Time)
    J'ai alors un message qui m'indique que le projet a déclanché une classe d'exception EDATABASERROR sur le paramètre '53:21' qui correspond à l'heure tronqué de mon datetime picker ( 14:53:21).

    J'aurai pu croire que la conversion était mal réalisée, or, j'effectue le même procédé pour insérer une date dans ma base de donnée :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    datetostr(self.datepickerRech.date)
    Est-ce que le problème vient de la base de donnée ( champ de réception ) ou à votre avis de mon application ( conversion ?) ?

    Merci par avance de votre participation

    Nzs

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2007
    Messages
    26
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Drôme (Rhône Alpes)

    Informations forums :
    Inscription : Août 2007
    Messages : 26
    Par défaut
    Pourquoi est-ce que tu convertis ton type date en string ? Si dans ta Table le champ que tu veux remplir est de type date, il risque de ne pas aimer une chaine de caractères

    Enfin bon c'est qu'une remarque hein, jme gourre ptet mais c'est ce qui m'a sauté aux yeux en voyant ton code.

    (EDIT : oh ptin j'avais pas vu ton pseudo XD jte dis pas qui je suis mais on se connait )

  3. #3
    Expert confirmé
    Avatar de qi130
    Homme Profil pro
    Expert Processus IT
    Inscrit en
    Mars 2003
    Messages
    3 944
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 64
    Localisation : France

    Informations professionnelles :
    Activité : Expert Processus IT
    Secteur : Finance

    Informations forums :
    Inscription : Mars 2003
    Messages : 3 944
    Par défaut
    Citation Envoyé par Nzs26 Voir le message
    Est-ce que le problème vient de la base de donnée ?
    Evidemment, d'où le libellé de l'exception EDATABASEERROR ...

    Quel SGBD utilises-tu ?
    Quels composants d'accès ?

  4. #4
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut
    Et oui, j'ai mes galons en MCD mais pas en delphi

    Alors je convertit en chaîne toutes mes requêtes sql car c'est une fonction qui les exécutes et cette dernière ne gère donc que les chaîne de caractères.

    Donc pour les composants, je passe par l'ensemble : TSqlQuery, TDataSetProvider, TClientDataSet, TDataSource,

    Mais j'insère mes dates, entiers et floats par l'intermédiaire de ma requête sql convertis en string et je n'ai aucun problème de ce côté là ...

    Sinon le SGBD utilisé est SQL Server Entreprise Manager V 8.0 voila !

  5. #5
    Expert éminent
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    14 096
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    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 : 14 096
    Par défaut
    Transmets-lui la Date via

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    FormatDateTime('HH:NN', TimePickerReception.Time)
    mais c'est surprenant, tu devrais consulter la Doc de SQL Server au sujet des fonctions encodage des Dates dans le SQL (en oracle c'est nécessaire par exemple)
    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

  6. #6
    Membre confirmé Avatar de Nzs26
    Profil pro
    Développeur Web
    Inscrit en
    Août 2007
    Messages
    136
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Août 2007
    Messages : 136
    Par défaut
    Bonjour,

    Alors ShaiLeTroll j'ai suivis tes conseils et effectivement, je peux ainsi insérer mon heure dans ma base de données, je me suis rendue compte par la même occassion qu'il fallait que je mette des guillemets avant ma chaîne pour que la date ne reste pas fixée à 01/01/1900 :

    Ancien code d'insertion :


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    strquery := 'insert into PROCESS_LABO_MP_TARRIVEE '
                                       +'( date, heure, datefab, Numlot, Residu, Qterecep, Id_CTRLMP , Id_MAGACUVE, Operateur) ' 
                                       +'values '
                                       +'( ' + datetostr(self.datepickerRech.Date) + ', '
                                       + FormatDateTime('HH:NN', self.timepickerReception.Time) + ''', '
                                       + datetostr(self.datepickerFab.Date) + ', '
                                       + '''' + self.zsNumlot.Text + ''', '
                                       + self.zsIdResidu.Text + ', '
                                       + self.zsQte.Text + ', '
                                       + self.zsIdCtrlMp.Text + ', '
                                       + self.zsIdMaga.Text + ', '
                                       + '''' + self.zsOperatr.Text + ''')';
                            _frmData.prRequete(self.cdsInsert, self.sqlInsert, strQuery, 'e');
    Nouveau code d'insertion :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    strquery := 'insert into PROCESS_LABO_MP_TARRIVEE '
                                       +'( date, heure, datefab, Numlot, Residu, Qterecep, Id_CTRLMP , Id_MAGACUVE, Operateur) ' 
                                       +'values '
                                       +'( ''' + datetostr(self.datepickerRech.Date) + ''', '
                                       + '''' + FormatDateTime('HH:NN', self.timepickerReception.Time) + ''', '
                                       + ''''+ datetostr(self.datepickerFab.Date) + ''', '
                                       + '''' + self.zsNumlot.Text + ''', '
                                       + self.zsIdResidu.Text + ', '
                                       + self.zsQte.Text + ', '
                                       + self.zsIdCtrlMp.Text + ', '
                                       + self.zsIdMaga.Text + ', '
                                       + '''' + self.zsOperatr.Text + ''')';
                            _frmData.prRequete(self.cdsInsert, self.sqlInsert, strQuery, 'e');
    Alors pour l'annecdote, la date est stockée ainsi dans la base de donnée : jj/mm/aaaa et l'heure ainsi : jj/mm/aaaa hh:mm:ss ( la date restant fixée à 01/01/1900) alors que mes deux champs sont en smalldatetime, ma précision dans ma convertion HH:NN aurait du régler ce léger 'soucis' mais apparemment non, si quelqu'un avait des informations là dessus, je suis preneuse !

    En tous les cas, merci pour la rapidité de réponse et la solution apportée !

    NZs

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

Discussions similaires

  1. Problème Base de données et CRecordSet
    Par LE CHAKAL dans le forum MFC
    Réponses: 3
    Dernier message: 20/08/2002, 11h59
  2. connexion base de donné
    Par saidi dans le forum MFC
    Réponses: 3
    Dernier message: 07/08/2002, 22h22
  3. [Concept] Stabilité d'une base de donnée
    Par lassmust dans le forum Décisions SGBD
    Réponses: 3
    Dernier message: 03/07/2002, 16h16
  4. Bases de données
    Par dev dans le forum C++Builder
    Réponses: 4
    Dernier message: 01/07/2002, 22h55
  5. associer une base de données(access) a un dbgrid
    Par ange1708 dans le forum MFC
    Réponses: 3
    Dernier message: 11/06/2002, 12h18

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