[Base] Valeur décimale tronquée

Discussions et questions sur tout ce qui concerne la programmation tous langages et tous modules confondus.

Modérateur : Vilains modOOs

Règles du forum
:alerte: Balisage obligatoire dans cette section !
Aidez-nous à vous aider au mieux en balisant correctement votre question : reportez-vous sur les règles de cette section avant de poster !
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

[Base] Valeur décimale tronquée

Message par dlalleme »

Bonsoir,

Je bute sur un problème qui est le suivant.
Je récupère des valeurs décimales depuis une table mysql à l'aide d'une macro .

Lorsque je les écris dans leur cellule respective, j'obtiens un entier quelque soit le format de la cellule.

Voici le code pour lire et affecter ces cellules

Code : Tout sélectionner

'-----------------------------------------------------------------------
'Recherche des transporteurs et l'affecter dans la plage A51:F100
'-----------------------------------------------------------------------
Function ListeT(NomFeuille, Requete)

	dim maRequete As Object, resuQuery As Object
	dim SQL As String, monSignet As Variant
	dim tabResultat As Variant, uneLigne As Variant
	dim l As long
	dim LeCellRange As Object, FeuilleRes As Object, maCellule As Object

    Requete=Trim(Requete)
    
	ConnecterSource

	maRequete = maConnexion.CreateStatement()
	resuQuery = maRequete.executeQuery(Requete)
	

	FeuilleRes=thisComponent.sheets.getByName(NomFeuille)
	LeCellRange=FeuilleRes.getCellRangeByName("a51:f100")
	
	LeCellRange.ClearContents(1+2+4)

	l=0
	
	If Not IsNull(resuQuery) Then
	    while resuQuery.next
		'Affiche le contenu du 1ier et du deuxième champ
		maCellule = LeCellRange.getCellByPosition(0,l)
		maCellule.String = resuQuery.GetString(1)
		maCellule = LeCellRange.getCellByPosition(1,l)
		maCellule.Value = resuQuery.GetInt(2)
		maCellule = LeCellRange.getCellByPosition(2,l)
		maCellule.Value = resuQuery.GetInt(3)
'ici on récupère un entier avec GetDouble
		maCellule = LeCellRange.getCellByPosition(3,l)
		maCellule.Value = resuQuery.GetDouble(4)
		maCellule = LeCellRange.getCellByPosition(4,l)
'ici on récupère aussi un entier avec Columns(n).Double
		maCellule.Value = resuQuery.Columns(4).Double
		maCellule = LeCellRange.getCellByPosition(5,l)
		maCellule.Value = resuQuery.Columns(5).Double
		maCellule = LeCellRange.getCellByPosition(6,l)
		maCellule.Value = resuQuery.Columns(6).Double
		l=l+1
		wend
	End If

	DeconnecterSource

End function
L'appel à la fonction est le suivant :

Code : Tout sélectionner

ListeT("Technique", "SELECT nom, idx_tra, poidspalette, surcharge /100, forfait *100/100, participe_surete  *100/100 FROM cr_transporteurs")
Et voici la structure de ma table :

Code : Tout sélectionner

CREATE TABLE IF NOT EXISTS `cr_transporteurs` (
  `idx_tra` int(11) NOT NULL auto_increment,
  `nom` varchar(45) collate utf8_bin NOT NULL,
  `poidspalette` int(11) default NULL,
  `surcharge` double(5,2) default NULL,
  `forfait` double(5,2) default NULL,
  `participe_surete` double(5,2) default NULL,
  PRIMARY KEY  (`idx_tra`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_bin AUTO_INCREMENT=2 ;
Si j'ai par exemple la valeur 5.99 dans le champ surcharge, je récupère 5.Idem pour les autres valeurs
Je soupçonne un problème de point ou virgule pour les décimales mais je n'arrive pas à voir où !!!

Cordialement
Dernière modification par Flip le 05 mai 2010 07:43, modifié 2 fois.
Raison : TO : "[Macro] Valeur décimale tronquée"
OpenOffice 3.1 sous Ubuntu
Avatar de l’utilisateur
MrPropre
MOOdérateur
MOOdérateur
Messages : 1138
Inscription : 01 oct. 2008 16:54

Re: [Macro] Valeur décimale tronquée

Message par MrPropre »

Bonsoir,

Les icônes mises à votre disposition ont une signification précise sur ce forum.
Veuillez consulter ce fil pour en savoir plus : http://user.services.openoffice.org/fr/ ... c3299.html

Pouvez-vous nous expliquer l'utilité de la balise [Macro] dans la section Macro ?
Relisez le bandeau rouge en haut de la page et mettez cela correctement : http://user.services.openoffice.org/fr/ ... c1369.html
Nettoyez votre PC du piratage, utilisez des logiciels libres à chaque lavage.
Une seule dose de OpenOffice suffit à éliminer durablement toute trace de MS-Office.
Avatar de l’utilisateur
Loopingss
InconditiOOnnel
InconditiOOnnel
Messages : 783
Inscription : 17 déc. 2008 01:50

Re: [Macro] Valeur décimale tronquée

Message par Loopingss »

Bonsoir,
dlalleme a écrit : Si j'ai par exemple la valeur 5.99 dans le champ surcharge, je récupère 5.Idem pour les autres valeurs
Je soupçonne un problème de point ou virgule pour les décimales mais je n'arrive pas à voir où !!!
5.99 risque d'être interprété comme une chaine de caractères. Avez vous essayé avec 5,99 (virgule au lieu de point) ?
COOordialement.

EDIT : Merci de retirer la coche verte de votre premier post qui fait croire que votre problème est [Résolu], ce qui n'est pas le cas.
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

Re: [Macro] Valeur décimale tronquée

Message par dlalleme »

Bonsoir,

La valeur 5.99 dans le champ surcharge est dans la table mysql. Donc la décimale est un point pour une valeur numérique dans ce cas.

Cordialement
OpenOffice 3.1 sous Ubuntu
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Valeur décimale tronquée

Message par Dude »

Salut,

Que donne le résultat de ta requête dans l'éditeur SQL ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

Re: [Base] Valeur décimale tronquée

Message par dlalleme »

Bonsoir,

De quel éditeur parlez-vous pgmyadmin, OOO base, les sources de données ?

Si je prends les sources de données (F4), les valeurs numériques dans mes tables ont une virgule comme décimale.

Mais pourquoi l'interprétation est incorrecte lors de mon extraction à l'aide des macros ?

Cordialement
OpenOffice 3.1 sous Ubuntu
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Base] Valeur décimale tronquée

Message par bm92 »

Bonsoir,
Ne serait-ce pas ta requête dont les calculs convertissent en valeur entière ?

Code : Tout sélectionner

ListeT("Technique", "SELECT nom, idx_tra, poidspalette, surcharge /100, forfait *100/100, participe_surete  *100/100 FROM cr_transporteurs")
Essaye donc une requête comme:

Code : Tout sélectionner

ListeT("Technique", "SELECT nom, idx_tra, poidspalette, surcharge, forfait, participe_surete FROM cr_transporteurs")
Si la table contient des valeurs non entières, tu devrais retrouver ces valeurs.

Je ne connais pas assez SQL, mais peut-être faut-il mettre des valeurs de type Double, comme 100.0 plutôt que 100 tout seul.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Valeur décimale tronquée

Message par Dude »

bm92 a écrit :Ne serait-ce pas ta requête dont les calculs convertissent en valeur entière ?
Ouaip et pour s'en assurer :
Dude a écrit :Que donne le résultat de ta requête dans l'éditeur SQL ?
Menu Outils > SQL...

:?:
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

Re: [Base] Valeur décimale tronquée

Message par dlalleme »

Bonsoir,

L'utilisation de Outils -> SQL me ramène aucune donnée et m'indique simplement que la requête a été effectuée avec succès.

J'ai donc créé une requête avec toutes les colonnes de ma table mysql et lorsque j'exécute ma requête, j'ai bien mes valeurs numériques (décimales) avec des virgules alors qu'elles ont des points dans ma base mysql.

Il n'y a que lorsque j'utilise ma macro que je sèche et récupère une valeur entière... :shock:

En ce qui concerne les champs de ma requête j'ai bien entendu essayé surcharge, puis surcharge * 100/100, surcharge /10 et j'ai toujours un résultat entier 5, puis 5 et 0. En sachant que surcharge a comme valeur 5.99.

Voilà... Je récupère pourtant d'autres données de ma base autres que décimales et elles sont justes ....

Cordialement
OpenOffice 3.1 sous Ubuntu
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Base] Valeur décimale tronquée

Message par bm92 »

Bonjour,
Je sèche... Ca devrait marcher, selon ce que tu expliques.
Ce qui me gène, c'est que la situation n'est pas suffisamment simplifiée. Tu sembles te baser sur ce qu'indique les cases de ton tableur, après une boucle d'un codage qui a été remanié.

Crée la table avec un seul enregistrement, et des valeurs reconnaissables et différentes pour chaque champ.
Récris la routine en :

Code : Tout sélectionner

 Function ListeT(NomFeuille, Requete)

       dim maRequete As Object, resuQuery As Object

       ConnecterSource

       maRequete = maConnexion.CreateStatement()
       resuQuery = maRequete.executeQuery("SELECT * FROM cr_transporteurs")
       resuQuery.next
       MsgBox("idx_tra = " & resuQuery.getInt(1))
       MsgBox("nom = " & resuQuery.getString(2))
       MsgBox("poidspalette = " & resuQuery.getInt(3))
       MsgBox("surcharge = " & resuQuery.getDouble(4)
       MsgBox("forfait = " & resuQuery.getDouble(5))
       MsgBox("participe_surete = " & resuQuery.getDouble(6))

       DeconnecterSource

End function
Ainsi le tableur n'intervient plus, et la séquence SQL est une simple lecture de la table.
Tu dois pouvoir vérifier que les bonnes colonnes sont lues.
Si ça tronque les valeurs avec décimales, c'est un problème du pilote mySql.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

Re: [Base] Valeur décimale tronquée

Message par dlalleme »

Bonjour,

@bm92 : Bien vu, la requête ramène des valeurs entières. J'utilise MySQL Connector for OpenOffice.org by Sun Microsystems, Inc.
J'utilise le connecteur mysql natif. Ce que je ne comprends pas c'est que les données dans la source de données ont un affichage correct et les données issues de la requête non.

Peut est-ce un problème de connexion à la source ?

Code : Tout sélectionner

Public maConnexion As Object

Sub ConnecterSource()
Dim NomSource As String, login As String, password As String
Dim maSource As Object, monContext As Object

'Création du contexte

NomSource = "Croisillons"
monContext = CreateUnoService("com.sun.star.sdb.DatabaseContext")
maSource=monContext.getByName(NomSource)

'Les paramètres de connexion
login = "xxxxx"
password = "xxxxx"

maConnexion = maSource.getConnection(login, password)
if IsNull(maConnexion) then
  MsgBox("Connexion impossible", 16)
  Stop
end if
End Sub
Cordialement
OpenOffice 3.1 sous Ubuntu
bm92
ManitOOu
ManitOOu
Messages : 2562
Inscription : 26 nov. 2005 13:42

Re: [Base] Valeur décimale tronquée

Message par bm92 »

est-ce un problème de connexion à la source ?
je ne pense pas, si les valeurs sont bien celles de la table (hormis la troncature des double) on accède bien à la base.
J'utilise MySQL Connector for OpenOffice.org by Sun Microsystems, Inc.
Je suppose qu'il s'agit bien de la dernière version 1.0.0 signalée par Bidouille. Consulte les liens qu'il indique. Le serveur MySQL doit être au moins en version 5.1.
signature a écrit :OpenOffice 3.1 sous Ubuntu
Il s'agit bien de la version officielle d'OpenOffice.org ? pas de celle d'Ubuntu ? La version 3.1.1 serait mieux (moins de bogues).

Si tout est correct, fais un rapport d'anomalie en joignant toutes infos utiles et un exemple simplifié au maximum.
Bernard

OpenOffice.org 1.1.5 fr / Apache OpenOffice 4.1.1 / LibreOffice 5.0.5.2 (X64)
MS-Windows 7 SP1 64bits Familial
Avatar de l’utilisateur
Dude
IdOOle de la suite
IdOOle de la suite
Messages : 26195
Inscription : 03 mars 2006 07:45
Localisation : 127.0.0.1

Re: [Base] Valeur décimale tronquée

Message par Dude »

Autre piste, le connecteur MySQL est natif et tu te sers du service "com.sun.star.sdb.DatabaseContext".

Pourquoi ne pas utiliser plutôt : ThisDatabaseDocument.DataSource.getConnection ?
Poser une question, c'est bien. Répondre aux autres, c'est encore mieux.
Améliorez AOO et votez pour les issues
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

Re: [Base] Valeur décimale tronquée

Message par dlalleme »

Bonjour,
Dude a écrit :Autre piste, le connecteur MySQL est natif et tu te sers du service "com.sun.star.sdb.DatabaseContext".

Pourquoi ne pas utiliser plutôt : ThisDatabaseDocument.DataSource.getConnection ?
Oui, le problème est peut être ici mais comment utiliser cette syntaxe plutôt que celle que j'utilise ? Désolé mais je suis débutant en macro OOO (ceci est mon premier projet) malgré 30 ans d'expérience en développement (non trente ans n'est pas mon âge :D ).

J'ai testé le même programme (macro) sous OOO 3.2 sous lucid 10.04 et c'est pareil. La décimale serait-elle en option chez OOO ? :wink:

Cordialement
OpenOffice 3.1 sous Ubuntu
dlalleme
Fraîchement OOthentifié
Messages : 7
Inscription : 03 mai 2010 16:27

Re: [Base] Valeur décimale tronquée

Message par dlalleme »

Bonjour,

J'ai modifié le type de connexion en utilisant JDBC et je récupère les décimales.
Je ne sais toujours pas pourquoi la connexion native mysql pose problème ...

Cordialement
Le modérateur a écrit : :alerte: Merci de ne pas poster plusieurs messages à la suite !
Si vous devez ajouter un complément d'information, le bouton "Editer" à la droite du message permet d'y remédier.

En attendant une prochaine réponse, vous pouvez participer également en répondant à d'autres questions sur notre forum.
OpenOffice 3.1 sous Ubuntu