Précédent   Forum du club des développeurs et IT Pro > Bases de données > Firebird > Installation
Installation Forum d'entraide sur l'installation et la configuration du serveur Firebird
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/09/2012, 17h18   #1
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 15
Points : 5
Points : 5
Par défaut Gerer le format décimal

bonjour,


J'ai un petit problème avec des données

quant j'envois des donnée sur mon serveur il me les stock pas au bon format:

voici ma base
Code :
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
 
--Table: MATERIAU
 
--DROP TABLE MATERIAU;
 
CREATE TABLE MATERIAU (
  ID               INTEGER NOT NULL,
  DESIGNATION      VARCHAR(70),
  UNITE            VARCHAR(3),
  PRIX             DECIMAL(9,3),
  COND             DECIMAL(6,3),
  MARGE            DECIMAL(3,3),
  STOCK_MINI       DECIMAL(9,3),
  FAMILLE          VARCHAR(20),
  PRIX_DE_VENTE    DECIMAL(6,2),
  EMPLACEMENT      VARCHAR(20),
  PRIX_VENTE_FIXE  INTEGER,
  Q_STOCK          DECIMAL(9,3),
  COMMENTAIRE      VARCHAR(200),
  STOCK_MAXI       DECIMAL(9,3),
  GERER_EN_STOCK   INTEGER,
  TEST             NUMERIC(5,1) DEFAULT NULL,
  /* Clés */
  PRIMARY KEY (ID)
);
 
 
SET TERM ^ ;
 
CREATE TRIGGER MATERIAU_BI FOR MATERIAU
ACTIVE BEFORE INSERT POSITION 0
AS
BEGIN
  IF (NEW.ID IS NULL) THEN
  NEW.ID = GEN_ID(GEN_MATERIAU_ID,1);
END^
 
SET TERM ; ^
quant j'envoie "PRIX_DE_VENTE = '1.01'"sur mon serveur il enregistre '1,00999999046326' dans ma base comment puis-je régler le problème?

d'avance merci!!!
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/09/2012, 10h45   #2
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 032
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 032
Points : 2 665
Points : 2 665
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
Bonjour,
Citation:
Envoyé par vience Voir le message
...quant j'envoie "PRIX_DE_VENTE = '1.01'"sur mon serveur il enregistre '1,00999999046326' dans ma base comment puis-je régler le problème?
Avec quel outil (=programme) insérez vous cette valeur dans la table ?
C'est là que le problème d'arrondi se trouve, il faudrait utiliser un type de variable dont le type de codage permet d'éviter ce phénomène d'approximation...
__________________
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2012, 20h27   #3
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 15
Points : 5
Points : 5
bonjour,

merci pour votre reponse

en effais question idiote répose idiote...

je travail sur un userfrom sous VBA et en fait j'envois une variable sous ce format : "Replace(CDbl(Box5), ",", ".")" et çà me donne ce résultat citer plus haut...
en fait j'ai essayer aussi : "Str(Box5)" et j'ai pas prêter attention au résultat qui est bon dans la base de donnée

je me pose ces questions:

1)° j'ai dans tout les cas visualiser la requête avant de la valider et il ce trouve qu'elle était bonne => bon les mystères de l'informatique on va dire

2)° pourquoi firebird ne renvoie pas une erreur ou arrondi la donnée si elle n'est pas conforme au format => DDD.AAA?
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2012, 18h04   #4
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 032
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 032
Points : 2 665
Points : 2 665
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
Citation:
Envoyé par vience Voir le message
en effais question idiote répose idiote...
Oh, l'autre !
Citation:
Envoyé par vience Voir le message
j'envois une variable sous ce format : "Replace(CDbl(Box5), ",", ".")"
Donc, vous transformez la valeur d'une zone de saisie en Double et après vous appliquez un remplacement du signe de séparation décimale ?
Citation:
Envoyé par vience Voir le message
1)° j'ai dans tout les cas visualiser la requête avant de la valider et il ce trouve qu'elle était bonne => bon les mystères de l'informatique on va dire
Quelle est cette requête ?
Citation:
Envoyé par vience Voir le message
2)° pourquoi firebird ne renvoie pas une erreur ou arrondi la donnée si elle n'est pas conforme au format => DDD.AAA?
Quelle est la version de Firebird d'ailleurs ?
Quel SQL Dialect est utilisé ? (1, 3 ?)
__________________
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2012, 00h00   #5
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 15
Points : 5
Points : 5
bonsoir,

voici ma requete:
Code :
1
2
 
UPDATE MATERIAU SET PRIX = '1', MARGE = '1', PRIX_DE_VENTE = ' 1.01' WHERE ID = 1
et mon ancien code vba :
Code :
1
2
3
4
 
SQL = "UPDATE MATERIAU "
SQL = SQL & "SET PRIX = '" & REPLACE(CDbl(Box5), ",", ".") & "', MARGE = '" & REPLACE(CDbl(Box6), ",", ".") & "', PRIX_DE_VENTE = '" & Str(Box7) & "' "
SQL = SQL & "WHERE ID = " & ID_Materiau
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2012, 00h17   #6
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 15
Points : 5
Points : 5
bonsoir,

voici ma requete:
Code :
1
2
 
UPDATE MATERIAU SET PRIX = '1', MARGE = '1', PRIX_DE_VENTE = ' 1.01' WHERE ID = 1
et mon ancien code vba :
Code :
1
2
3
4
 
SQL = "UPDATE MATERIAU "
SQL = SQL & "SET PRIX = '" & REPLACE(CDbl(Box5), ",", ".") & "', MARGE = '" & REPLACE(CDbl(Box6), ",", ".") & "', PRIX_DE_VENTE = '" & Str(Box7) & "' "
SQL = SQL & "WHERE ID = " & ID_Materiau

ma version fb est 2.5 et
je sais pas ou trouvez le dialect
Citation:
1)° j'ai dans tout les cas visualiser la requête avant de la valider et il ce trouve qu'elle était bonne => bon les mystères de l'informatique on va dire
j'ai mis çà par ce que j'ai lu quelle que par sur un forum que les programme informatique avais du mal à stocké des nombres à virgule sous un format binaire et je peu comprendre...

ce que je comprend pas c'est que quand on demande à firebird de stocker
Code :
PRIX_DE_VENTE    DECIMAL(6,2)
qu'il puisse stocker '1,00999999046326'
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2012, 10h12   #7
SergioMaster
Modérateur
 
Avatar de SergioMaster
 
Homme Serge Girard
Développeur informatique
Inscription : janvier 2007
Messages : 4 216
Détails du profil
Informations personnelles :
Nom : Homme Serge Girard
Âge : 56
Localisation : France

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

Informations forums :
Inscription : janvier 2007
Messages : 4 216
Points : 7 284
Points : 7 284
Bonjour
la requête devrait être
Code :
1
2
 
UPDATE MATERIAU SET PRIX = 1.00, MARGE = 1.00, PRIX_DE_VENTE = 1.01 WHERE ID = 1
et non des valeurs entre Quotes
le mieux serait d'utiliser une requête paramétrée (quoique en VBA je ne sache pas comment faire je suis DELPHI(ste))

mais je pense que le problème essentiel vient des Quotes ,même dans l'ancien code VBA , j'aurais mis ceci :
Code :
1
2
3
SQL = "UPDATE MATERIAU "
SQL = SQL & "SET PRIX = " & REPLACE(CDbl(Box5), ",", ".") & ", MARGE =" & REPLACE(CDbl(Box6), ",", ".") & ", PRIX_DE_VENTE = " & Str(Box7) & " "
SQL = SQL & "WHERE ID = " & ID_Materiau
__________________
La seule chose absolue dans un monde comme le nôtre, c'est l'humour. » Albert Einstein
J'entends et j'oublie. Je vois et je me souviens. Je fais et je comprends . Confucius
Si votre seul outil est un marteau, vous aurez tendance a ne voir que des clous
SergioMaster est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 13/09/2012, 11h19   #8
Ph. B.
Expert Confirmé
 
Avatar de Ph. B.
 
Homme Philippe
Inscription : avril 2002
Messages : 1 032
Détails du profil
Informations personnelles :
Nom : Homme Philippe
Âge : 46
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2002
Messages : 1 032
Points : 2 665
Points : 2 665
Envoyer un message via ICQ à Ph. B. Envoyer un message via Skype™ à Ph. B.
Bonjour,
Citation:
Envoyé par vience Voir le message
voici ma requete:
Code :
UPDATE MATERIAU SET PRIX = '1', MARGE = '1', PRIX_DE_VENTE = ' 1.01' WHERE ID = 1
Evitez d'écrire des nombres sous forme de chaines de caractères, cela évitera des conversions de type inutiles...
Code :
UPDATE MATERIAU SET PRIX = 1, MARGE = 1, PRIX_DE_VENTE = 1.01 WHERE ID = 1
en vba, cela devrait s'écrire (je virerais les fonctions CDBL et STR qui sont AMHA inutiles):
Code :
1
2
3
SQL = "UPDATE MATERIAU "
SQL = SQL & "SET PRIX = " & REPLACE(Box5, ",", ".") & ", MARGE = " & REPLACE(Box6, ",", ".") & ", PRIX_DE_VENTE = " & REPLACE(Box7, ",", ".") & " "
SQL = SQL & "WHERE ID = " & ID_Materiau
Citation:
Envoyé par vience Voir le message
ma version fb est 2.5 et
je sais pas ou trouvez le dialect
Donc à priori SQL Dialect 3 (cf. FAQ) sauf conversion d'une ancienne base de données.
Pour en être sur, se connecter à la base de données sous ISQL, puis tapez SHOW SQL DIALECT;
Citation:
Envoyé par vience Voir le message
ce que je comprend pas c'est que quand on demande à firebird de stocker
Code :
PRIX_DE_VENTE    DECIMAL(6,2)
qu'il puisse stocker '1,00999999046326'
J'ai effectué différents tests avec FB 2.5.1 et votre table sous Delphi et depuis IbExpert. Je ne reproduis pas ce dysfonctionnement. Je reste sur ma première idée que le problème d'arrondi se situe côté VBA.
__________________
Philippe.
Ph. B. est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/12/2012, 22h34   #9
vience
Invité régulier
 
Vincent NOURRY
ARTISAN
Inscription : février 2012
Messages : 15
Détails du profil
Informations personnelles :
Nom : Vincent NOURRY
Localisation : France, Côtes d'Armor (Bretagne)

Informations professionnelles :
Activité : ARTISAN
Secteur : Bâtiment

Informations forums :
Inscription : février 2012
Messages : 15
Points : 5
Points : 5
Bonjour,

désoler d'avoir délaisser le forum mais je pense avoir trouvé le disfonctionement

en faite le résultat qui me posait probleme je le lisais dans ma base avec firebird maestro et je pense que c'est lui qui "lisais" mal le résultat

du reste je pense que est d'une bonne utilité puise qui change 2,00 en 2.00
VBA 2.00 c'est du string et en SQL 2.00 c'est du décimal

dans tout les cas merci pour votre intéret
vience est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 09h23.


 
 
 
 
Partenaires

Hébergement Web