Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

Décimales perdues lors de l'exécution d'une requête

2 réponses
Avatar
AJADV
Bonjour,
Dans un de mes programmes je suis amené à créer une table de travail
comportant deux champs Montant1 et Montant2. Le champ Montant1 est rempli à
partir d'une table existante, ceci à l'aide d'une requête qui crée la table
de travail, le champ Montant 2 sera ensuite utilisé pour enregistrer d'autres
montants à partir d'une autre requête qui ajoutera de nouveaux
enregistrements où le champ Montant2 sera alors rempli. J'ai donc la séquence
suivante :
1-Création de la table de travail (je crée un champ Montant2 de valeur 0)
SQL="SELECT Montant1, 0 AS Montant2 INTO [Table de travail]"
SQL=SQL & vbcrlf & "FROM Table1;"
2-Ajout de nouveaux enregistrements depuis une autre table:
SQL="INSERT INTO [Table de travail] ( Montant2 )"
SQL=SQL & vbcrlf & " SELECT Montant2"
SQL=SQL & vbcrlf & " FROM Table2;"
Tout se passe correctement lors de l'exécution des requêtes si ce n'est que
dans la table de travail les valeurs mises dans les champs Montant2 sont
arrondis (ce n'est pas le cas des champs Montant1). Exemple : 29,35 devient
29, 43,50 devient 44 etc.
Comment faire pour que les décimales soient conservées ?
Un grand merci à qui pourra me donner une explication et une solution.
Alain
--
AJ

2 réponses

Avatar
LiR
Bonjour,

Tu peux forcer le champ Montant2 créé dans la table de travail à être un
réel (double précision) et non un entier en explicitant le type de la valeur
stockée grâce à la fonction CDbl. En effet, par défaut 0 est interprété comme
un entier long, donc le champ créé est de ce type.

cela donne :

1-Création de la table de travail (je crée un champ Montant2 de valeur 0)
SQL="SELECT Montant1, CDbl(0) AS Montant2 INTO [Table de travail]"
SQL=SQL & vbcrlf & "FROM Table1;"


"AJADV" a écrit :

Bonjour,
Dans un de mes programmes je suis amené à créer une table de travail
comportant deux champs Montant1 et Montant2. Le champ Montant1 est rempli à
partir d'une table existante, ceci à l'aide d'une requête qui crée la table
de travail, le champ Montant 2 sera ensuite utilisé pour enregistrer d'autres
montants à partir d'une autre requête qui ajoutera de nouveaux
enregistrements où le champ Montant2 sera alors rempli. J'ai donc la séquence
suivante :
1-Création de la table de travail (je crée un champ Montant2 de valeur 0)
SQL="SELECT Montant1, 0 AS Montant2 INTO [Table de travail]"
SQL=SQL & vbcrlf & "FROM Table1;"
2-Ajout de nouveaux enregistrements depuis une autre table:
SQL="INSERT INTO [Table de travail] ( Montant2 )"
SQL=SQL & vbcrlf & " SELECT Montant2"
SQL=SQL & vbcrlf & " FROM Table2;"
Tout se passe correctement lors de l'exécution des requêtes si ce n'est que
dans la table de travail les valeurs mises dans les champs Montant2 sont
arrondis (ce n'est pas le cas des champs Montant1). Exemple : 29,35 devient
29, 43,50 devient 44 etc.
Comment faire pour que les décimales soient conservées ?
Un grand merci à qui pourra me donner une explication et une solution.
Alain
--
AJ


Avatar
AJADV
Un grand merci pour la solution. Mon problème est résolu.
Alain
--
AJ


"LiR" a écrit :

Bonjour,

Tu peux forcer le champ Montant2 créé dans la table de travail à être un
réel (double précision) et non un entier en explicitant le type de la valeur
stockée grâce à la fonction CDbl. En effet, par défaut 0 est interprété comme
un entier long, donc le champ créé est de ce type.

cela donne :

1-Création de la table de travail (je crée un champ Montant2 de valeur 0)
SQL="SELECT Montant1, CDbl(0) AS Montant2 INTO [Table de travail]"
SQL=SQL & vbcrlf & "FROM Table1;"


"AJADV" a écrit :

> Bonjour,
> Dans un de mes programmes je suis amené à créer une table de travail
> comportant deux champs Montant1 et Montant2. Le champ Montant1 est rempli à
> partir d'une table existante, ceci à l'aide d'une requête qui crée la table
> de travail, le champ Montant 2 sera ensuite utilisé pour enregistrer d'autres
> montants à partir d'une autre requête qui ajoutera de nouveaux
> enregistrements où le champ Montant2 sera alors rempli. J'ai donc la séquence
> suivante :
> 1-Création de la table de travail (je crée un champ Montant2 de valeur 0)
> SQL="SELECT Montant1, 0 AS Montant2 INTO [Table de travail]"
> SQL=SQL & vbcrlf & "FROM Table1;"
> 2-Ajout de nouveaux enregistrements depuis une autre table:
> SQL="INSERT INTO [Table de travail] ( Montant2 )"
> SQL=SQL & vbcrlf & " SELECT Montant2"
> SQL=SQL & vbcrlf & " FROM Table2;"
> Tout se passe correctement lors de l'exécution des requêtes si ce n'est que
> dans la table de travail les valeurs mises dans les champs Montant2 sont
> arrondis (ce n'est pas le cas des champs Montant1). Exemple : 29,35 devient
> 29, 43,50 devient 44 etc.
> Comment faire pour que les décimales soient conservées ?
> Un grand merci à qui pourra me donner une explication et une solution.
> Alain
> --
> AJ