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

 Delphi Discussion :

problème d'insertion d'un enregistrement


Sujet :

Delphi

  1. #1
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut problème d'insertion d'un enregistrement
    salut à toutes et à tous,

    j'ai un problème d'insertion d'enregistrement dans ma base de donnée :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Table1.FieldByName('Code_client').asInteger:=Strtoint(Edit1.text);
    ...
    Table1.post;
    Quand je saisie le "Code_client" dans le "Edit1" , je n'ai pas de problème mais quand je fais un post sans le saisir, c'est à dire le "Edit1" est vide, j'obtiens un joli message d'erreur :"impossible de convertir String en Double..."

    je suis preneur à toutes idée.

    Merci.

    A+

    NABIL74

  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
    Salut,

    C'est logique qu'il ne peut pas convertir un vide en integer ou en double.
    Et es-ce que c'est logique de créer un client sans son code ? qui est peut-être considérer comme clé d'enregistrement ?

    Avant de poster vers la BDD assurez-vous que vos données sont cohérentes en plaçant des tests et en nommant vos controles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Begin
     
      If EdCodeClient.Text=' ' Then 
      Begin
      ShowMessage ('Veuillez saisir le code client');
      Exit;
      End;
     
      Table1.FieldByName('Code_client').asInteger:=Strtoint(EdCodeClient.text);
     ...
      Table1.post;
      End;
    End;
    Et si le code du client n'est que numérique puisque vous utilisez le StrToInt, forcez la saisie en numérique dans l'événement OnKeyPress du TEdit pour eviter tout problème :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
     if Key in ['a'..'z'] + ['A'..'Z'] then Key := #0 ;
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  3. #3
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par freud Voir le message
    Salut,

    C'est logique qu'il ne peut pas convertir un vide en integer ou en double.
    Et es-ce que c'est logique de créer un client sans son code ? qui est peut-être considérer comme clé d'enregistrement ?

    Avant de poster vers la BDD assurez-vous que vos données sont cohérentes en plaçant des tests et en nommant vos controles :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    Begin
     
      If EdCodeClient.Text=' ' Then 
      Begin
      ShowMessage ('Veuillez saisir le code client');
      Exit;
      End;
     
      Table1.FieldByName('Code_client').asInteger:=Strtoint(EdCodeClient.text);
     ...
      Table1.post;
      End;
    End;
    salut,
    @ freud,merci de ta réponse .

    j'ai donné un exemple d'affectation d'un nom de champ de type integer à un TEdit. le "Code_client" est là pour vous expliquez mon problème seulement.
    dans mon cas, je dispose d'un champ : "N°_armoire" de type Integer .
    y a t-il une convertion à faire afin de pouvoir poster l'enregistrement sans saisir le "N°_armoire" ?

    A+

    NABIL74

  4. #4
    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
    Si votre champ n'est pas un champ de saisie alors utiliser le type AutoInc ou un générateur dans la BDD et donc pas de conversion à faire. Mais vous devriez mentionner le type de base de données que vous utilisez..
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  5. #5
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    non non freud, mon champ est un champ de saisie, mais l'utilisateur du soft est libre de saisir ce champ "N°_armoire".

    mon SGBD: Paradox. mais je ne vois pas la relation avec mon SGBD care ce problème peut-être rencontrer avec d'autres SGBD.

    A+

    NABIL74

  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 NABIL74 Voir le message
    afin de pouvoir poster l'enregistrement sans saisir le "N°_armoire" ?
    ben là, on comprend que vous ne voulez pas saisir le numéro.

    Donc, si il est libre de saisir ça veut dire qu'il y a des cas oû il ne le saisie pas. alors c'est au programme de le faire au moment du post. Donc en mode de saisie proposez lui un numéro que vous récupérerez depuis une table et, avant le post, faite le test de l'existence de ce numéro dans la BDD au cas oû il aurait saisie un numéro existant déjà. Et pour eviter la conversion, forcez la saisie en numérique avec le code du OnKeyPress ou utilisez un controle numérique de la JVCL.
    Si quelqu'un t'a offensé, ne cherche pas à te venger; assieds-toi au bord de la rivière et, bientôt, tu verras passer son cadavre.

    Lao Tseu - un sage chinois

    Celui qui lutte contre les monstres doit veiller à ne pas le devenir lui-même.
    Et quand ton regard pénètre longtemps au fond d'un abîme, l'abîme, lui aussi, pénètre en toi.

    Friedrich Nietzsche - Par délà le bien et le mal

  7. #7
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    mon champ est un champ de saisie, mais l'utilisateur du soft est libre de saisir ce champ "N°_armoire".
    Etant donnée que vous permettez la saisie du vide pour le champ Num_Armoire, vous pouvez par exemple faire le test avant l'insertion
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    if (Edit1='') then
    Table1.FieldByName('Code_Armoire').asString:=''
    else
    Table1.FieldByName('Code_Armoire').asInteger:=StrToInt(Edit1.Text);
     
    ...
    Table1.Post;
    //En supposant que le Edit contienne soit un entier soit une chaine vide.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  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
    Plus simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Table1.FieldByName('Code_Armoire').asInteger:=StrToIntDef(Edit1.Text,0);
    Voir l'aide pour StrToIntDef
    Modérateur Delphi

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

  9. #9
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Bonjour à toutes et à tous,
    @ freud,
    merci pour toutes vos réponses.
    Je ne veux pas proposer à l'utilisateur un numéro déjà saisie dans le TEdit au moment de la conception dans ma fiche.

    @ b_reda31,

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    if (Edit1='') then
    Table1.FieldByName('Code_Armoire').asString:=''
    else
    Table1.FieldByName('Code_Armoire').asInteger:=StrToInt(Edit1.Text);
     
    ...
    Table1.Post;
    //En supposant que le Edit contienne soit un entier soit une chaine vide.
    je testerai ça ce soir Inchallah.Mais je doute que ça marcherais parceque mon type de champ est Integer et non un String. à tester.

    @ Rayek,
    Je t'esterais ça se soir et je vous tiendrais au courant.

    A+

    NABIL74

  10. #10
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.FieldByName('Code_Armoire').asInteger:=StrToIntDef(Edit1.Text,0);
    Ok ça marche!
    En laissant la valeur du TEdit vide, je peux poster l'enregistrement. Le TEdit alors prend la valeur 0.

    Pour moi ce tag est résolu.
    Merci à tous d'être penché sur mon cas.

    NABIL74

  11. #11
    Expert éminent sénior
    Avatar de ShaiLeTroll
    Homme Profil pro
    Développeur C++\Delphi
    Inscrit en
    Juillet 2006
    Messages
    13 459
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 43
    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 : 13 459
    Points : 24 873
    Points
    24 873
    Par défaut
    Une Variante pour éviter un zéro parasite !
    Dans certains métiers, le zéro c'est donnée pertinente, différente d'un vide qui indique l'absence de donnée !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      NewCode: Integer;
    ...
    if TryStrToInt(Edit1.Text, NewCode)
     Table1.FieldByName('Code_Armoire').AsInteger = NewCode
    else
     Table1.FieldByName('Code_Armoire').Clear();
    Après, remarque à la con comme j'aime, il existe le TDBEdit qui fait tout ça tout seul (contrôle de la frappe, gestion d'un masque et connecté directement sur Table1)
    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

  12. #12
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par NABIL74 Voir le message
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Table1.FieldByName('Code_Armoire').asInteger:=StrToIntDef(Edit1.Text,0);
    Ok ça marche!
    En laissant la valeur du TEdit vide, je peux poster l'enregistrement. Le TEdit alors prend la valeur 0.
    Ici vous ne différenciez pas entre "Erreur de Saisie" et "Saisie Vide". Pour ces deux cas vous aurez un 0 comme valeur. En gros si l'user saisi accidentellement un caractère au milieu du N°Armoire, il ne s’en rendra pas compte. Donc il vaudra mieux ajouter aussi un contrôle de saisi comme vous le suggère Freud.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  13. #13
    Membre confirmé
    Homme Profil pro
    Enseignant
    Inscrit en
    Août 2008
    Messages
    666
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Algérie

    Informations professionnelles :
    Activité : Enseignant
    Secteur : Enseignement

    Informations forums :
    Inscription : Août 2008
    Messages : 666
    Points : 643
    Points
    643
    Par défaut
    Citation Envoyé par ShaiLeTroll Voir le message
    Une Variante pour éviter un zéro parasite !
    Dans certains métiers, le zéro c'est donnée pertinente, différente d'un vide qui indique l'absence de donnée !

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    var
      NewCode: Integer;
    ...
    if TryStrToInt(Edit1.Text, NewCode)
     Table1.FieldByName('Code_Armoire').AsInteger = NewCode
    else
     Table1.FieldByName('Code_Armoire').Clear();
    Après, remarque à la con comme j'aime, il existe le TDBEdit qui fait tout ça tout seul (contrôle de la frappe, gestion d'un masque et connecté directement sur Table1)
    Bonjour à toutes et à tous,
    Oui , le TDBedit fait l'affaire, mais dans mon cas, j'ai besoin de travailler avec un TEdit pour poster l'enregistrement.
    merci à tous.

    NABIL74

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 04/05/2015, 14h36
  2. Problème d'insertion enregistrement
    Par allexpert dans le forum Requêtes et SQL.
    Réponses: 14
    Dernier message: 20/10/2009, 17h29
  3. Problème d'insertion d'un enregistrement
    Par doolar dans le forum Bases de données
    Réponses: 1
    Dernier message: 11/05/2008, 17h37
  4. [SQL] Problème lors de l'insertion d'un enregistrement dans ma base de données.
    Par Velkan.nexus dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 09/10/2007, 11h59
  5. Problème d'insertion avec MySQL
    Par Sonny dans le forum ASP
    Réponses: 13
    Dernier message: 28/08/2003, 13h52

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