

![]() | Start a set with this search |
![]() | Include this search in one of my sets |
![]() | Exclude this search from one of my sets |
![]() | Permalink to these results Paste this link in email or IM: |
| Atom feed for tracking future search results Paste this URL into your reader: |
6 messages in org.openoffice.fr.progRe: [prog] requietes SQL et operation...| From | Sent On | Attachments |
|---|---|---|
| Snopie Snopie1 | Aug 29, 2005 10:31 am | |
| Bernard Marcelly | Aug 30, 2005 3:17 am | |
| Snopie Snopie1 | Aug 30, 2005 8:25 am | |
| Bernard Marcelly | Aug 31, 2005 12:46 am | |
| Snopie Snopie1 | Aug 31, 2005 5:09 am | |
| Bernard Marcelly | Aug 31, 2005 8:12 am |

![]() | Permalink for this message Paste this link in email or IM: |
![]() | Permalink for this thread Paste this link in email or IM: |
| Atom feed for this thread Paste this URL into your reader: |
| Subject: | Re: [prog] requietes SQL et operations sur Currency | Actions... |
|---|---|---|
| From: | Bernard Marcelly (marc...@club-internet.fr) | |
| Date: | Aug 30, 2005 3:17:21 am | |
| List: | org.openoffice.fr.prog | |
Bonjour Snopie Snopie1, Il y a beaucoup de points à analyser séparément et posément dans ton mail, et il manque des informations pour que la communauté puisse (peut-être) t'aider. Pour ma part je ne suis pas spécialiste de mysql.
D'abord : - sur quelle version OOo es-tu ? il semble que ce soit une version 1.9.xxx (à préciser). - Quel OS ?
Message du 2005-08-29 19:31:
bonjour liste, j'ai qlqs problemes avec la recuperation des resultats de requetes SQL ainsi qu'avec les nombres et les conversions string->currency.
je fais un acces odbc->mysql avec un select qui me renvoie une somme. lorsque je l'execute en ligne de commande mysql, ca marche, mais lors d'un acces a partir d'OOo, j'ai mon nombre qui est tronque de sa partie decimale:
Question : y-a-t-il un problème seulement avec une somme, ou aussi en récupérant une valeur d'un enregistrement? Parce que la somme est calculée par le moteur mysql (sauf erreur de ma part).
============= 'la source est correctement connecte
res=req.executeQuery("select nom,sum(credit) from clients group by idclients") Do while res.next nom =res.Columns(0).String str_solde=res.Columns(1).String 'type String...
quel est le type du champ Columns(1) dans ta base mysql ? quelle est la version de mysql ?
est-ce que tu as bien défini : Dim str_solde As String
msgbox("str_solde=" & str_solde) 'renvoie la sommme tronquee!
qu'est-ce que ça veut dire, tronquée ? il faudrait des exemples réels avec le contenu de la base et le résultat dans Basic. Il y a peut-être un problème de Locale (point ou virgule décimale, séparateur de milliers).
' traiter nom, str_solde Loop ==============
si je fais res.Columns(1).Short, la troncature est aussi effectuee.
de toute façon .Short va supprimer les décimales.
.Double n'est pas acceptable car les
calculs doivent etre exacts (cf. plus loin).
ça ce n'est pas évident. Les .Short .String .Double font des conversions entre le *résultat* de la requête et une représentation dans un type Basic. Mais le sum() dans la requête étant traité par le moteur de la base de données, le type final n'a pas d'impact sur la précision du calcul.
__________________________________________________________
je sépare, car ce qui suit est un autre problème qui aurait mérité d'être un mail séparé.
puis il y a ce code: =============== Sub Main Dim s As String Dim c As Currency, d As Currency, g As Currency Dim e As Integer
c=100/8/2 'voici d'un coup le resultat qu'on veut
c=100 d=100/8 '=12.5 ok
c=d d=c/2 '=0 ko!
e=2 d=c/e '=0 ko!
g=2 d=c/g '=0 ko!
Moi je ne vois plus ces erreurs avec ma "vieille" 1.9.113
en lisant "Programmation OOo" d'eyrolles, je vois que val() renvoie un flottant, or je veux un calcul _exact_ a 4 decimales.
en principe cela devrait marcher à condition de faire un arrondi à 4 décimales lors de la conversion Double > Currency. Pour cela je viens de concocter une fonction qui a l'air de marcher (sur 1.9.xxx) :
Function Dbl2Curr(d As Double) As Currency Dbl2Curr = LTrim(str(CDbl(format(d, "0.0000")))) End Function
tjs dans le meme livre p58: les currency ne supportent que + et - pour la version 1.1.
oui, (à l'époque la version 1.9 n'était pas disponible)
ma question est: comment fait-on pour convertir sans perte d'information (en deca de 4 decimales, et sans la troncature des flottants) ainsi que pour effectuer des operations de division et multiplication sur les currency?
- soit passer à la version 1.9 (en supportant les fautes résiduelles diverses) - soit employer un autre langage que Basic. Si dans ton application, OOo n'est qu'un simple moyen de "reporting" il peut être plus judicieux d'utiliser un langage indépendant (Python, Java, Delphi, C++) pour interroger la base et faire des calculs, et de lui faire piloter OOo pour sortir les rapports.
M. Marcelly devrait mettre en gras le passage p58 pour la prochaine edition. ;)
on y pensera éventuellement; quoique dans ce petit chapitre, le lecteur devrait le voir facilement. C'est une illustration de plus que OOoBasic n'est pas VBA, même s'il y ressemble. Programmeurs VB, faites attention.
Bernard







