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 :

FB erreur conversion chaine --> date


Sujet :

Bases de données Delphi

  1. #1
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut FB erreur conversion chaine --> date
    Salut

    j'ai un composant edit pour saisir la date, j'utilise le DateSeparator afin de construire ma chaine exprimant la date, quand je fais un ajout avec "insert into ***" ça marche bien, mais quand je fais une modification avec "update ****" j'obtiens une erreur de type "conversion error from string "14/03/2011"", la chaine "14/03/2011" n'est qu'un exemple de la date saisie.

    logiquement ça devrait marcher puisque lors de l'insertion j'ai pas eu de message d'erreur mais avec le update ça passe pas ?! j'ai beau cherché mais j'ai pas trouvé mon erreur ! peut-être que quelqu'un a déjà eu ce problème.

    j'attends vos réponses et suggestions, merci par avance.

  2. #2
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Bonjour,

    Probablement que la chaine n'est pas bien construite pour l'Update....
    Montrez les deux codes (Insert et Update).?
    Le champ date est de quel type dans la table ?
    En tous cas j'utilise le compo TJvDateEdit de la JVCL ca simplifie le travail.

  3. #3
    Membre confirmé Avatar de JustMe
    Inscrit en
    Juillet 2002
    Messages
    479
    Détails du profil
    Informations forums :
    Inscription : Juillet 2002
    Messages : 479
    Points : 594
    Points
    594
    Par défaut
    En SQL une date est au format MM/JJ/AAAA

  4. #4
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Citation Envoyé par JustMe Voir le message
    En SQL une date est au format MM/JJ/AAAA
    je suis d'accord mais comment se fait-il qu'avec insert ça fonctionne alors qu'avec update ça fonctionne pas !!

  5. #5
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Citation Envoyé par freud Voir le message
    Bonjour,

    Probablement que la chaine n'est pas bien construite pour l'Update....
    Montrez les deux codes (Insert et Update).?
    Le champ date est de quel type dans la table ?
    En tous cas j'utilise le compo TJvDateEdit de la JVCL ca simplifie le travail.
    voici le code pour le insert
    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
    37
    38
    39
     
     
     
    t := ('insert into tb_courrier (nature_courrier, famille, type_courrier, reference,');
          t := t + ('date_correspondance, objet, mots_cles, chemin_dur)');
          t := t + (' values (:cb_Nature, :cb_Famille, :cb_Type, :ed_Ref, :ed_Date, :ed_Objet, :ed_Mots_Cles, :ed_Chemin)');
          dmData.IBQ_Courrier.SQL.Clear;
          dmData.IBQ_Courrier.SQL.Add(t);
          // appel de la fonction d'ajout de courrier
          if Ajouter_Courrier(cb_Nature.Text, cb_Famille.Text, cb_Type.Text, ed_Ref.Text, ed_Date.Text,
                           ed_Objet.Text, ed_Mots_Cles.Text, ed_Chemin.Text ) then
       // reste du code   
     
    function TfmMain.Ajouter_Courrier(f_Nature, f_Famille, f_Type, f_Ref,
                 f_Date, f_Objet, f_Mots_Cles, f_Chemin : string) : boolean;
    begin
      try
        with dmData.IBQ_Courrier.Params do
        begin
          ParamByName('cb_Nature').Text := f_Nature;
          ParamByName('cb_Famille').Text := f_Famille;
          ParamByName('cb_Type').Text := f_Type;
          ParamByName('ed_Ref').Text := f_Ref;
          ParamByName('ed_Date').Text := f_Date;
          ParamByName('ed_Objet').Text := f_Objet;
          ParamByName('ed_Mots_Cles').Text := f_Mots_Cles;
          ParamByName('ed_Chemin').Text := f_Chemin;
          dmData.IBQ_Courrier.ExecSQL;
          dmData.IBTrans_Courrier.CommitRetaining;
          Result := True;
        end;
      except
         on e: exception do
         begin
           Result := False;
           ShowMessage(e.Message);
         end;
      end;
    end;
    et maintenant le code update
    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
    t := ('update tb_courrier ');
          t := t + ('set nature_courrier =') + QuotedStr(cb_Nature.Text) + ',';
          t := t + (' famille =') + QuotedStr(cb_Famille.Text) + ',';
          t := t + (' type_courrier =') + QuotedStr(cb_Type.Text) + ',';
          t := t + (' reference =') + QuotedStr(ed_Ref.Text) + ',';
          t := t + (' date_correspondance =') + QuotedStr(ed_Date.Text) + ',';
          t := t + (' objet =') + QuotedStr(ed_Objet.Text) + ',';
          t := t + (' mots_cles =') + QuotedStr(ed_Mots_Cles.Text) + ',';
          t := t + (' chemin_dur =') + QuotedStr(ed_Chemin.Text)  ;
          t := t + (' where code_courrier =') + IntToStr(c_c);
     
          dmData.IBQ_Courrier.SQL.Clear;
          dmData.IBQ_Courrier.SQL.Add(t);
          try
            dmData.IBQ_Courrier.ExecSQL;
          except
            on E : EIBError do
            begin
              dmData.IBTrans_Courrier.RollbackRetaining;
              if not (dmData.IBQ_Courrier.Active) then dmData.IBQ_Courrier.Open;
              Actions_Bouton_gb_courrier(True);
              ShowMessage('Code Erreur :' + IntToStr(EIBError(E).IBErrorCode) + #10#13 +
                        'Message : ' + e.Message);
              Exit;
            end;

  6. #6
    Membre éclairé Avatar de freud
    Homme Profil pro
    Développeur
    Inscrit en
    Mai 2002
    Messages
    1 271
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur

    Informations forums :
    Inscription : Mai 2002
    Messages : 1 271
    Points : 681
    Points
    681
    Par défaut
    Citation Envoyé par freud
    Probablement que la chaine n'est pas bien construite pour l'Update
    Je voulais dire la chaine exprimant la date.
    Ca doit-être le QuotedStr de :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    QuotedStr(ed_Date.Text)
    Qui créer problème. Et puisque ca marche avec le code de l'insert pourquoi ne pas utiliser le même style pour l'update (avec des ParamByName) ?

  7. #7
    Rédacteur
    Avatar de evarisnea
    Homme Profil pro
    Ingénieur intégration
    Inscrit en
    Juin 2005
    Messages
    1 957
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Cameroun

    Informations professionnelles :
    Activité : Ingénieur intégration
    Secteur : Transports

    Informations forums :
    Inscription : Juin 2005
    Messages : 1 957
    Points : 4 384
    Points
    4 384
    Par défaut


    Citation Envoyé par freud Voir le message
    Et puisque ca marche avec le code de l'insert pourquoi ne pas utiliser le même style pour l'update (avec des ParamByName) ?
    +1 pour les paramètres, les paramètres c'est bon mangez-en !

  8. #8
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Points : 460
    Points
    460
    Par défaut
    Ne faut il pas enlever "QuotedStr" pour le champ date ???

  9. #9
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    • Ok pour l'utilisation des paramètres
    • Pour ce qui est de QuotedStr j'ai essayé sans mais ça donne erreur toujours

  10. #10
    Membre confirmé
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Février 2006
    Messages
    537
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 56
    Localisation : Belgique

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Février 2006
    Messages : 537
    Points : 460
    Points
    460
    Par défaut
    As tu déja essayé en mettant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t := t + (' date_correspondance =') + QuotedStr('14/03/2011') + ',';
    ???

  11. #11
    Rédacteur/Modérateur

    Avatar de SergioMaster
    Homme Profil pro
    Développeur informatique retraité
    Inscrit en
    Janvier 2007
    Messages
    15 130
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 68
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur informatique retraité
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2007
    Messages : 15 130
    Points : 41 289
    Points
    41 289
    Billets dans le blog
    63
    Par défaut
    une date Firebird peut avoir plusieurs format
    à l'anglaise MM/DD/YYYY
    à la francaise DD.MM.YYYY
    il y en a d'autres , voir sur le forum Firebird

    de plus il faudra dans le cas d'un construction de ce genre faire un CAST

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    (' date_correspondance = CAST(' + QuotedStr(ed_Date.Text) + 'AS DATE),';
    enfin dans ton cas , un peu de gym quand à la variable ed_date.Text est nécessaire :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    formatDatetime('dd.mm.yyyy',strtodate(ed_date.text)) // si tu veux rester absolument sur une présentation 'à la francaise'
    mais ceci reste très 'sale' je conseille fortement d'utiliser les paramètres

  12. #12
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Bonjour !

    Merci à vous tous, je m'en suis sortie avec les paramètres mais je ne comprends toujours pas d'où peu provenir l'erreur ! un paramètre ne fait que passer la variable, il n'a aucune influence sur le formatage de la donnée !! mais bon ça marche c'est l'essentiel pour le moment.

  13. #13
    Expert éminent sénior
    Avatar de Cl@udius
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2006
    Messages
    4 878
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 61
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Matériel informatique

    Informations forums :
    Inscription : Février 2006
    Messages : 4 878
    Points : 10 008
    Points
    10 008
    Par défaut
    Salut

    Dans ta requête INSERT tu utilises des paramètres. Ceux-ci sont alimentés par ParamByName(). A ce niveau là pas de soucis, c'est la méthode recommandée car le composant IBX enverra la date sous un format correcte.

    Par contre dans ta requête UPDATE, tu n'utilises pas de paramètres mais tu construit entièrement ta requête.
    Lorsque tu écris:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    t := t + (' date_correspondance =') + QuotedStr(ed_Date.Text) + ',';
    le résultat obtenu pour le 14 mars 2011 est:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    DATE_CORRESPONDANCE = '14/03/2011'
    aucune transposition du format de la date n'est effectuée et la requête est envoyée telle qu'elle vers Firebird.

    D'où ton erreur: conversion error from string "14/03/2011", car Firebird interprète 14 comme le mois.

    Pour info, les formats de date littérale acceptés par Firebird sont:
    CCYY-MM-DD ou YY-MM-DD
    MM/DD/CCYY ou MM/DD/YY
    DD.MM.CCYY ou DD.MM.YY
    DD-MMM-CCYY ou DD-MMM-YY
    DD MMM CCYY ou DD MMM YY
    DDMMMCCYY ou DDMMMYY
    Conclusion: Utilises des requêtes paramétrées.

    @+ Claudius

  14. #14
    Membre émérite
    Homme Profil pro
    Directeur technique
    Inscrit en
    Mai 2008
    Messages
    2 401
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Directeur technique
    Secteur : Service public

    Informations forums :
    Inscription : Mai 2008
    Messages : 2 401
    Points : 2 310
    Points
    2 310
    Par défaut
    Merci Cl@udius, rien ne vaut un bon exemple, là c'est mieux . Vraiment un grand merci pour cette explication académique.

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

Discussions similaires

  1. conversion chaine en date
    Par newcodeur dans le forum Macros et VBA Excel
    Réponses: 1
    Dernier message: 21/07/2008, 16h03
  2. conversion chaine en date
    Par hypothese dans le forum Requêtes
    Réponses: 2
    Dernier message: 05/07/2008, 01h13
  3. Erreur de conversion chaine-entier
    Par N_I_C_S dans le forum Shell et commandes GNU
    Réponses: 3
    Dernier message: 11/06/2007, 10h15
  4. conversion d'une chaine en date
    Par monphp dans le forum Général JavaScript
    Réponses: 5
    Dernier message: 31/05/2007, 10h29
  5. conversion d'une date en chaine de caracteres
    Par salmer dans le forum Langage SQL
    Réponses: 1
    Dernier message: 10/10/2006, 16h31

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