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

Bases de données Delphi Discussion :

Saisie des dates avec delphi 7 et oracle 9


Sujet :

Bases de données Delphi

  1. #1
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Saisie des dates avec delphi 7 et oracle 9
    Bonjour à tous,

    J'ai un sérieux problème avec mon application que j'ai développée avec delphi 7 et oracle 9i en utlisant les composants Dbexpess pour l'accèes à la base de données.
    Voici la structure d'une de mes tables.

    Nom NULL ? Type
    ----------------------------------------- -------- -------------
    ESSENCE_ID NOT NULL VARCHAR2(30)
    SITE_ID NOT NULL VARCHAR2(30)
    PRODUCTEUR_ID NOT NULL VARCHAR2(30)
    TAUX_TAXE NOT NULL NUMBER
    DATE_ACHAT DATE
    MARTEAU VARCHAR2(10)
    DATE_PV_COMP DATE
    NUM_PIECE VARCHAR2(10)
    CHOIX_ESSENCE VARCHAR2(10)
    DEFRAIS_ESSENCE VARCHAR2(10)
    VOLUME_ACHAT NUMBER(10,2)
    NBRE_RONDINS NUMBER(4).


    Lorsque je saisis DATE_ACHAT et DATE_PV_COMP je reçois le message : ORA-01861 : le littéral ne concorde pas avec le format chaine de caractères.

    Mon code est le suivant:

    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
    procedure TFMAJACHATS_OK_OZ.ValiderClick(Sender: TObject);
    begin
     with SqlQuery1 do
            begin
              Close;
              with Sql do
              begin
                //DateAchat.Format:=FormatDateTime('yyyy/mm/dd', Date) ;
     
                Clear;
                Add('INSERT INTO ACHATS_ESSENCES');
                Add('  (SITE_ID,ESSENCE_ID,PRODUCTEUR_ID,DATE_ACHAT,TAUX_TAXE,NUM_PV_ACHAT,CHOIX_ESSENCE'
                +',VOLUME_ACHAT,MARTEAU,DEFRAIS_ESSENCE,NBRE_RONDINS,TYPE_ACHAT)');
                DateSeparator:='/';
                DecimalSeparator:='.';
                Add('  VALUES ('''+ Site.Text+''','''+ Essence.text+''','''+Producteur.text
                +''','''+FormatDatetime('yyyy/mm/dd',DateAchat.Date)+''','''+Taux.text //FormatDateTime('yyyy/mm'ddd',DateAchat.Date)
                +''','''+NumPV.Text+''','''+Choix.Text+''','''+Volume.Text+''','''+Marteau.Text
                +''','''+Defraichis.Text+''','''+NbreRond.Text+''','''+TypeAchat.text+''')');
                DecimalSeparator:=',';
                DateSeparator:='/';
              end;
     
              Try
                //if not Module_Stock.SQLconnect.InTransaction then
               // Module_Stock.SQLconnect.StartTransaction(gTD);
                ExecSql;
                //Module_Stock.SQLconnect.Commit(gTD);
                ShoWmessage('Enregistrement bien effectué...');
               Module_stats.ClientDACHATS_OK_OZ.Refresh;
              except
              on e:exception do
               MessageDlg(e.Message,mtInformation,[mbOk],0);
             end;
           end;      
    end;

    Quelqu'un peut-il m'aider?
    end;

  2. #2
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Mon dieu que c'est laid cette écriture

    Dans un cas comem le tient, je te conseil de passer par les paramètres (ca sera largement plus lisible en plus

    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
     
    Clear;
    Add('INSERT INTO ACHATS_ESSENCES');
    Add('  (SITE_ID,ESSENCE_ID,PRODUCTEUR_ID,DATE_ACHAT,TAUX_TAXE,NUM_PV_ACHAT,CHOIX_ESSENCE');
    Add(',VOLUME_ACHAT,MARTEAU,DEFRAIS_ESSENCE,NBRE_RONDINS,TYPE_ACHAT)');
    Add('  VALUES (:SITE,:ESSENCE,:PRODUCT,:DACHAT,:TAUX,:NPV,:CHOIX,:VOLUME,:MARTO,:DEFRAIC,:NBROND,:TYPEACHAT)');
    DateSeparator:='/';
    DecimalSeparator:='.';
    ParamCheck := True;
    ParamByName('SITE').value := Site.Text;
    ParamByName('ESSENCE').value := Essence.text;
    ParamByName('PRODUCT').value := Producteur.text;
    ParamByName('DACHAT').value := FormatDatetime('yyyy/mm/dd',DateAchat.Date);
    ParamByName('TAUX').value := Taux.text;
    ParamByName('NPV').Value := NumPV.Text;
    ParamByName('CHOIX').Value := Choix.Text;
    ParamByName('VOLUME').Value := Volume.Text;
    ParamByName('MARTO').Value := Marteau.Text;
    ParamByName('DEFRAIC').Value := Defraichis.Text;
    ParamByName('NBROND').Value := NbreRond.Text;
    ParamByName('TYPEACHAT').Value := TypeAchat.text;
    DecimalSeparator:=',';
    Je ne suis pas sûr de la syntaxe pour l'appel de paramètres avec DbExpress, donc il te faut vérifier (un petit coups de ^^)
    Ca devrait régler pas mal de tes problèmes (lecture et date ^^)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  3. #3
    Membre éprouvé Avatar de Yurck
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Février 2005
    Messages
    682
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 14
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2005
    Messages : 682
    Points : 912
    Points
    912
    Par défaut
    Je suis d'accord (j'ai le droit) mais quitte à passer par des parmètres il faut en uutiliser toute la substance.


    Donc on remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ParamByName('DACHAT').value := FormatDatetime('yyyy/mm/dd',DateAchat.Date);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ParamByName('DACHAT').asDateTime := DateAchat.Date;
    a+
    Dans le vocabulaire des couturiers seulement, patron est synonyme de modèle.
    Aymond d'Alost

  4. #4
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par Yurck
    Je suis d'accord (j'ai le droit) mais quitte à passer par des parmètres il faut en uutiliser toute la substance.


    Donc on remplace
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    ParamByName('DACHAT').value := FormatDatetime('yyyy/mm/dd',DateAchat.Date);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    ParamByName('DACHAT').asDateTime := DateAchat.Date;
    a+

    Je l'ai laissé comme cela, car selon les SGBD il est nécessaire de formater quand même le champs comme il faut (Du moins avec Ado j'ai du le faire plusieurs fois, je n'utilise que très rarement DbExpress donc je n'ai aps trop de recul dessu ^^).
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  5. #5
    Membre habitué Avatar de giltonic
    Profil pro
    Inscrit en
    Juillet 2002
    Messages
    109
    Détails du profil
    Informations personnelles :
    Âge : 50
    Localisation : France

    Informations forums :
    Inscription : Juillet 2002
    Messages : 109
    Points : 137
    Points
    137
    Par défaut
    Moi je suis un partisant de

    Citation Envoyé par Yurck
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    ParamByName('DACHAT').asDateTime := DateAchat.Date;
    L'histoire d'utiliser FormatDateTime pour ADO ca doit etre encore que les composants pour ADO n'aiment pas les champs DATE en parametre... m'enfin si ca marche...
    Musique : Oasis | Photos : Panoramio

  6. #6
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par giltonic
    Moi je suis un partisant de



    L'histoire d'utiliser FormatDateTime pour ADO ca doit etre encore que les composants pour ADO n'aiment pas les champs DATE en parametre... m'enfin si ca marche...
    Non, c'est que les composants ADO n'ont pas de asDateTime, AsInterger, etc... avec ParamByName, on doit passer obligatoirement avec Value et selon le SGBD il traduiera correctement la date pour la base de données. (Ca dependra des drivers utilisés : ODBC, JET, natif, etc ...)
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

  7. #7
    Futur Membre du Club
    Inscrit en
    Mars 2007
    Messages
    6
    Détails du profil
    Informations forums :
    Inscription : Mars 2007
    Messages : 6
    Points : 5
    Points
    5
    Par défaut Message DBExpress : handle incorrect
    J'ai essayé de mettre la synthaxe indiquée par Malatar mais j'ai eu le message d'erreur suivant: DBExpress: handle incorrect.

    J'ai donc modifié comme ceci :

    ParamByName('DACHAT').value := DateAchat1.Text;

    Et ça marche

    Merci pour l'aide.

    Cependant j'ai un autre soucis. Lorsque je veux supprimer un enregistrement avec le DBNavigator, celui ne supprime rien du tout et le DBGrid relié à la table ne se rafraîchit pas. Comment faire?


  8. #8
    Modérateur
    Avatar de Rayek
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Mars 2005
    Messages
    5 235
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Haute Savoie (Rhône Alpes)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 235
    Points : 8 504
    Points
    8 504
    Par défaut
    Citation Envoyé par miwbath2007
    J
    Cependant j'ai un autre soucis. Lorsque je veux supprimer un enregistrement avec le DBNavigator, celui ne supprime rien du tout et le DBGrid relié à la table ne se rafraîchit pas. Comment faire?

    Tu es allé voir les tutoriels sur DBExpress ou fait une recherche sur le forum ?

    Vu que tu utilises un DbNavigator et un DbGrid, je pense que tu as du les connecter à un ClientDataSet (Ne connaissant pas ton logiciel je me base sur un schéma classique d'utilisation de DbExpress), si tu modifies la base de données, normalement tu dois aussi penser à rafraichir ce dernier pour que cela se répercute sur ton affichage.
    Modérateur Delphi

    Le guide du bon forumeur :
    __________
    Rayek World : Youtube Facebook

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

Discussions similaires

  1. problème saisie des Dates à partir d'un calendrier
    Par girlworld86 dans le forum IHM
    Réponses: 4
    Dernier message: 23/06/2007, 17h53
  2. [MySQL] le format idéal pour stocker des dates avec l'heure
    Par Philoulheinz dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 17/02/2007, 21h53
  3. Comment comparer des dates avec la procédure assertEquals de JUNIT ?
    Par andrianiaina dans le forum Eclipse Java
    Réponses: 2
    Dernier message: 25/01/2007, 18h31
  4. Saisie des dates
    Par J-P-B dans le forum XMLRAD
    Réponses: 5
    Dernier message: 04/07/2003, 11h08
  5. Réponses: 3
    Dernier message: 19/03/2003, 15h19

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