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 :

'' n'est pas une valeur en virgule flottante correcte


Sujet :

Bases de données Delphi

  1. #1
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 19
    Points
    19
    Par défaut '' n'est pas une valeur en virgule flottante correcte
    bonjour;
    je suis entrain de développer une pte application avec les bases de données,mais malheureusement quand j’exécute et je saisi mes données et aprés la validation ça me donne le message suivant:
    '' n'est pas une valeur en virgule flottante correcte.
    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
    procedure TForm1.BitBtn1Click(Sender: TObject);
    var
    sable,enlev,plus_val,refec_bit,refec_cim,refec_car,tansp,neutre,
    depens_man,depens_ouv,largeur,tranche,profondeur:real;
    begin
    table1.Open;
    table1.Append;
    dbedit1.SetFocus;
    decimalseparator:='.';
    if dbcombobox1.text='B' then largeur:=0.3;profondeur:=0.8;
    if dbcombobox1.text='C' then largeur:=0.4;profondeur:=0.9;
    if dbcombobox1.text='E' then largeur:=0.6;profondeur:=0.9;
    tranche:=strtofloat(dbedit2.Text);
    sable:=tranche*largeur*profondeur;
    end;
    merci de m'orienter.

  2. #2
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    Une piste, mais peut être pas la bonne.

    Dans le paramètre régional de ton ordinateur, le séparateur décimal est peut être la virgule et non le point.

    Change la présentation et tout devrait entrer dans l'ordre, ou bien utilise la virgule comment séparateur décimal dans ton programme.

    Si l'erreur se poursuit, examiner si aucun caractère autre que des chiffres ou le séparateur décimal se trouve dans "dbedit2.Text" utilisé pour la conversion.

    Bon courage

  3. #3
    Membre éclairé Avatar de DOLPat®
    Homme Profil pro
    Technicien maintenance
    Inscrit en
    Février 2003
    Messages
    426
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 62
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Technicien maintenance
    Secteur : Industrie

    Informations forums :
    Inscription : Février 2003
    Messages : 426
    Points : 790
    Points
    790
    Par défaut
    Citation Envoyé par laala.hamid Voir le message
    '' n'est pas une valeur en virgule flottante correcte.
    Bonjour

    Cette erreur est provoquée par une tentative de conversion d'une chaine vide...
    Vérifie que dbedit2.Text contient effectivement du texte.
    À +
    Pat.


    Si vous avez trouvé chaussure à votre pied... euh solution à votre problème, n'oubliez pas de clôturer le sujet en le marquant comme:
    ¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯¯
    Windows 8.1, Lazarus 1.8.2 SVN 57369 FPC 3.0.4 x86_64-win64-win32/win64

  4. #4
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    DOLPat® : Cette erreur est provoquée par une tentative de conversion d'une chaine vide...
    Comme j'ai été agacé par ce même problème répétitif je me suis concocté la fonction suivante :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    function  StrToFloatEdit(Sender: TObject; valSiVide : Extended) : Extended;
    var       ed : tEDIT;
    begin     ed := Sender as tEdit;
              if ed.text='' then Result:=ValSiVide
                            else Result:=StrToFloat(ed.text);
    end;
    dans laquelle le paramètre valSiVide est la valeur de substitution à renvoyer en cas de chaîne vide.

    Utilisation :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonReel:=StrToFloatEdit(edit1, 0.001);
    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  5. #5
    Membre éprouvé
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    566
    Détails du profil
    Informations personnelles :
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Secteur : Finance

    Informations forums :
    Inscription : Janvier 2009
    Messages : 566
    Points : 1 045
    Points
    1 045
    Par défaut
    Bonjour,

    @Gilbert Geyer
    Citation:
    DOLPat® : Cette erreur est provoquée par une tentative de conversion d'une chaine vide...
    Comme j'ai été agacé par ce même problème répétitif je me suis concocté la fonction suivante :
    Il existe une fonction Delphi qui fait cette conversion.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    tranche:= StrToFloatDef(dbedit2.Text, 0.00001);
    Elle se trouve dans l'unité SysUtils
    A+

  6. #6
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Re-bonjour,

    seabs : Il existe une fonction Delphi qui fait cette conversion.
    tranche:= StrToFloatDef(dbedit2.Text, 0.00001);
    Manque de chance : je ne l'ai pas trouvée sous Delphi 5.
    Par contre ça m'a permis de prendre conscience du fait que j'ai au moins les deux qui suivent :

    function StrToIntDef(const S: string; Default: Integer): Integer;
    function StrToInt64Def(const S: string; Default: Int64): Int64;

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

  7. #7
    Membre à l'essai
    Inscrit en
    Février 2009
    Messages
    26
    Détails du profil
    Informations forums :
    Inscription : Février 2009
    Messages : 26
    Points : 19
    Points
    19
    Par défaut
    merci beaucoup pour vous conseils mais malheureusement le problème persiste toujours.

  8. #8
    Membre habitué
    Inscrit en
    Octobre 2006
    Messages
    124
    Détails du profil
    Informations personnelles :
    Âge : 73

    Informations forums :
    Inscription : Octobre 2006
    Messages : 124
    Points : 126
    Points
    126
    Par défaut
    Bonjour,

    Pourquoi ne pas tester si dbedit2.Text est bien numérique ? du style
    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
     
     
    function IsNum(S: ShortString): Boolean;
    var
      I: Byte;
    begin
      Result := False;
      if S='' then
        Exit;
      if s[1]='+' then Delete(s, 1, 1);
      for I := 1 to Length(s) do
        if not(s[i]in ['-', '.', '0'..'9']) then
          Exit;
      Result := True;
    end;
     
     
    Puis
     
     
    If IsNum(dbedit2.Text) Then
    tranche:=strtofloat(dbedit2.Text) Else
    ...
    Et je mettrais un point d'arrêt pour vérifier la valeur.

    Bonne journée
    MS

  9. #9
    Modérateur

    Homme Profil pro
    Ingénieur retraité
    Inscrit en
    Octobre 2005
    Messages
    2 396
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Rhône (Rhône Alpes)

    Informations professionnelles :
    Activité : Ingénieur retraité

    Informations forums :
    Inscription : Octobre 2005
    Messages : 2 396
    Points : 3 263
    Points
    3 263
    Par défaut
    Bonjour,

    MarcS : Pourquoi ne pas tester si dbedit2.Text est bien numérique ? du style ...function IsNum(S: ShortString): Boolean;
    Comme laala.hamid a dit dans son 1ier message
    "je suis entrain de développer une petite application avec les bases de données,mais malheureusemenet quand j’exécute et je saisis mes données"
    ... il vaut mieux empêcher de saisir de mauvaises données dans les Edit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    procedure EditReelPositif(Sender: TObject; var Key: Char);
    begin     if (Key = '.') then Key :=',';
              if not (Key in ['0'..'9','+',',',Chr(VK_BACK), Chr(VK_DELETE)])
              then Key := #0;
    end; 
     
    // Utilisation :
     
    procedure TForm1.edit1KeyPress(Sender: TObject; var Key: Char);
    begin     EditReelPositif(Sender,Key); end;
    ... à noter que si on a 36 Edit's dans lesquels on doit saisir des réels positifs on peut faire pointer leur onKeyPress sur cette seule et même edit1KeyPress. (en évitant ainsi d'avoir à truffer le code par des if not IsNum then ...

    Suffit de se créer des :
    - procedure EditReelSigné();
    - procedure EditEntierPositif();
    - procedure EditEntierSigné();
    à l'image de EditReelPositif() et on se règle le pb pour ces divers cas.

    A+.
    N'oubliez pas de consulter les FAQ Delphi et les cours et tutoriels Delphi

Discussions similaires

  1. Réponses: 3
    Dernier message: 10/11/2011, 17h28
  2. "Si" ce n'est pas une valeur
    Par Martinfootplus dans le forum Excel
    Réponses: 2
    Dernier message: 06/08/2007, 00h50
  3. radiobutton erreur n'est pas une valeur entière correcte
    Par pierrot67 dans le forum Bases de données
    Réponses: 3
    Dernier message: 12/03/2006, 21h27
  4. 50.00 n'est pas un nombre en virgule flottante correct
    Par Merfolk dans le forum C++Builder
    Réponses: 2
    Dernier message: 26/01/2006, 00h44
  5. erreur '' n'est pas une valeur entière correcte
    Par ffxlenoir dans le forum Langage
    Réponses: 5
    Dernier message: 02/12/2005, 13h57

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