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 :

Lecture des champs de type numerique


Sujet :

Delphi

  1. #1
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut Lecture des champs de type numerique
    bonjour à tous
    j'ai créé une table "article"sous oracle qui contient un attribut "montant" de type numérique (numeric(12,2)),,,j'ai créé un "edit" sous delphi pour ajouter sa valeur à la table "article" (grace à insert into article(montant) values(edit1.text)) ) .. si je tape une valeur sans virgule il l'accepte, mais lorsque je tape par exemple '123,45' il m'affiche ce message "trop de valeurs"... j'ai essayé toutes les methodes mais sans interet
    pouvez vous m'aider SVP

  2. #2
    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

    C'est normal en SQL le séparateur décimal est le point (.)
    Donc tu as plusieurs solutions:
    • substituer la virgule par un point pendant la saisie (via KeyPress)
    • Ou alors effectuer cette substitution avant de transmettre la valeur à ta requête
    • Ou enfin stocker la saisie dans une variable de type Float ou Currency et transmettre cette valeur à ta requête paramétrée dans ce cas


    Voilà
    @+ Claudius

  3. #3
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    je vous jure que j'ai essayé tout ce que vous avez dit:
    -j'ai essayé la virgule et le point
    -j'ai ajouté cette instruction dans le code source "DecimalSeparator:= '.'/ ',' "(j'ai essayé les deux)
    -j'ai déclaré x:float x:=strtofloat(edit1.text)
    ......add values... floattostr(x);

    mais toujours le même message

  4. #4
    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
    Citation Envoyé par jean sami Voir le message
    ... mais lorsque je tape par exemple '123,45' il m'affiche ce message "trop de valeurs"...
    Avec cette requête:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SQL.Text := 'insert into article(montant) values(' + edit1.text + ')'
    Si ta valeur contient une virgule le résultat sera:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into article(montant) values(124,45)
    d'où l'erreur puisque SQL interprète 2 valeurs distinctes: 124 et 45.

    La solution la plus simple est substituer ta virgule par un point pendant la saisie dans le TEdit:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    procedure TForm1.Edit1KeyPress(Sender: TObject; var Key: Char);
    begin
      if not (Key in ['0'..'9', ',' , '.', Chr(VK_BACK), Chr(VK_DELETE)]) then
        Key := #0;
      if Key = ',' then
        Key := '.';
    end;
    [edit]
    Ainsi la requête transmise sera:
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    insert into article(montant) values(124.45)
    et là ce sera OK

    @+ Claudius

  5. #5
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    merci pour votre reponse
    mais ...mais.... lorsque je fais la consultation de cette table, ni le point apparait ni la virgule (12.45-->1245),,même si je veux affecter la valeur de Edit à une variable : x:real ,x:=strtofloat(edit1.text),, il m'affiche (virgule absente)
    sachant que j'ai utilisé la proposition de "keypress"

  6. #6
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    Il faut aussi que le type de données du champ de la base de données soit un type qui accepte une partie décimale Si tu utilises un type entier dans ta base, normal qu'il se débarrasse de la partie fractionnaire.

  7. #7
    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
    Citation Envoyé par jean sami Voir le message
    j'ai créé une table "article"sous oracle qui contient un attribut "montant" de type numérique (numeric(12,2))
    d'où mon interrogation face à la disparition du séparateur décimal.

    Un bout de code devrait nous permettre de voir plus clair.

    @+ Claudius

  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
    Bonsoir,
    effectivement un bout de code serait bien venu car:

    j'ai créé une table "article"sous oracle qui contient un attribut "montant" de type numérique (numeric(12,2))
    crée bien un champ qui accepte des nombres de maximum 12 chiffres et 2 chiffres après la virgule.

    C'est normal en SQL le séparateur décimal est le point (.)
    C'est exact.

    Et donc,
    INSERT INTO article(montant) VALUES(124.45)
    devrais fonctionner.
    Donc je ne vois pas où est la tuile.

    André


    P.S.: Salut Cl@udius

  9. #9
    Membre confirmé
    Avatar de JP.NUAGE
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    769
    Détails du profil
    Informations personnelles :
    Âge : 82
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 769
    Points : 542
    Points
    542
    Par défaut
    Pour rajouter une tuille suplémentaire, j'ai eu un pb similaire avec une table Firebird. J'ai même essayé de saisir 123.45, de le multiplier par 100 avant la requête et de le diviser par 100 dans la réquête. Rien n'y a fait ....tant que mon champ était déclaré NUMERIC. Dès que je l'ai passé en DECIMAL(15,2) tout à fonctionné.

    Maintenant ne me demandez pas pourqoui. C'est un des grands moments de l'informatique !

  10. #10
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    merci tous pour vos reponse
    concernant la déclaration, comme j'ai mentioné,montant est de type numeric (12,2),donc j'ai essayé la méthode de Cl@udius (keypress) et elle a marché,,, mais lorsque j'ai fait la consultation de cet attribut ,, la virgule est disparait!!
    (12.45)-->1245

  11. #11
    Membre expert
    Avatar de Golgotha
    Homme Profil pro
    Full-stack Web Developer
    Inscrit en
    Août 2007
    Messages
    1 387
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Full-stack Web Developer
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2007
    Messages : 1 387
    Points : 3 535
    Points
    3 535
    Billets dans le blog
    1
    Par défaut
    quels sont les composants que tu utilise ?

  12. #12
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    sqlconnection et
    sqlquery

  13. #13
    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
    Quand tu consulte ta base de données afin de vérifier la valeur enregistrée, tu le fais via une application Delphi ou via Oracle ?

    André

  14. #14
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    via une application delphi

  15. #15
    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
    Afin d'éliminer les inconnues, essaye de voir via Oracle ce qui se trouve dans ta colonne. Car potentiellement, pour le moment on a 2 risques d'erreurs:
    1/ l'ecriture
    2/ la lecture

    André

  16. #16
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    oui ça marche sous oracle, il a affiché (12,45)
    donc c'est un problème de lecture sous delphi

  17. #17
    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
    YES !!! Me voila rassuré car ton problème me chatouillait les 2-3 neurones que je possede
    Reste à nous montrer le code que tu as mit pour la lecture.

    André

  18. #18
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    sous delphi ,tout simplement j'ai fait pour la lecture de la valeur de edit.text
    'inert into article(montant) values('+edit1.text+');
    et pour la consultation (toujours sous delphi):
    select montant from article

  19. #19
    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
    Bonjour,
    ton problème est il résolu ?

    André

  20. #20
    Membre du Club
    Inscrit en
    Avril 2008
    Messages
    156
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 156
    Points : 62
    Points
    62
    Par défaut
    pas encore,meme si j'utilise le type decimal.. quand je fais 'select montant from article 'sous delphi, il n'ya ni le point ni la virgule,mais sous "sql plus" (d'oracle)ça marche trés bien
    j'ai une autre question dans le sous forum composant concernant le DBLookupCombobox qui m'a fatigué, SVP, si vous avez une reponse, aidez moi SVP

+ Répondre à la discussion
Cette discussion est résolue.
Page 1 sur 2 12 DernièreDernière

Discussions similaires

  1. Jointure entre 2 tables avec des champs de types différents
    Par qltmi dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 27/11/2008, 20h58
  2. Réponses: 4
    Dernier message: 01/10/2008, 16h36
  3. Réponses: 11
    Dernier message: 12/03/2008, 16h25
  4. Réponses: 1
    Dernier message: 09/11/2006, 12h08
  5. requete sql avec between sur des champs de type Date
    Par ersoufiane dans le forum Langage SQL
    Réponses: 2
    Dernier message: 02/08/2006, 19h43

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