Résultats de requête Sql en Vba

[Résolu/Fermé]
Signaler
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
-
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
-
Bonjour,

J'ai créé un requête Sql dans mon Vba, et j'affiche ensuite le résultat dans un msgbox.
Aucun problème quand il y a une seule ligne de résultat, mais comment faire pour afficher toutes les lignes quand il y en a plusieurs ?

Le code sera plus parlant :

Dim Requete As String
Requete = ""
ORACLE_CONNECTION = "XXX"
ORACLE_INSTANCE = "XXX"
Set OraSession = CreateObject("OracleInProcServer.XOraSession")
Set OraDatabase = OraSession.dbOpenDatabase(ORACLE_INSTANCE, ORACLE_CONNECTION, 0&)

Requete = "Select c.dat, sum(c.mt) From client c " 

Set OraDynaset = OraDatabase.dbcreatedynaset(Requete, 0&)
    dat = OraDynaset.Fields(0).Value
    mt = Format(Replace(OraDynaset.Fields(1).Value, ".", ","), "0,00.00")

MsgBox dat & " : " & mt


Merci beaucoup pour votre aide !

5 réponses

Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021
656
Bonjour,

en adaptant ceci à ton cas:

Dim i As Integer
Dim message As String
For i = 1 To 5
message = message & i & vbLf 'retour à la ligne
Next
MsgBox message


Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
1
Merci bien, c'est une partie de la solution.

Le problème maintenant, c'est que mes variables "dat" et "mt" correspondent à la première ligne de résultat.
S'il y a deux lignes, "dat" doit avoir deux valeurs et "mt" aussi.

Et je n'arrive pas à afficher les deux valeurs...
Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021
656
As-tu essayé ceci?

message = message & dat & " : " & mt & vbLf 'retour à la ligne


Et je n'arrive pas à afficher les deux valeurs...

je ne vois pas de boucle dans ce code!

  dat = OraDynaset.Fields(0).Value


pour avoir la 2ème valeur il faut faire:

  dat = OraDynaset.Fields(1).Value
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
1
oui, j'obtiens un msgbox avec ceci :
18/01/2019 : 500

C'est déjà super, mais il n'y a pas la deuxième ligne de résultat (qui devrait être : 14/01/2019 : 100).

D'un côté c'est plutôt logique, il me semble que les variables n'ont qu'une valeur dans mon code :
dat = OraDynaset.Fields(0).Value
mt = Format(Replace(OraDynaset.Fields(1).Value, ".", ","), "0,00.00")

Comment leur donner la deuxième valeur aussi, s'il y a deux lignes ? ou les trois valeurs s'il y a trois lignes etc ?
Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021
656
Il te faut faire une boucle voir ceci:

http://xlr8.free.fr/?p=396

@+ Le Pivert
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
1
Je touche au but ! Mais mes variables sont écrasées à chaque passage, dans la boucle.
Dans le lien il les affiche dans des cellules, ce qui paraît plus simple.

En debug :

For x = 0 To oraDynaSet.RecordCount - 1
dat = oraDynaSet.Fields(0).Value ' Au premier passage : "18/01/2019", au deuxième : "14/01/2019"
mt = oraDynaSet.Fields(1).Value ' Au premier passage : "500", au deuxième : "100"
oraDynaSet.MoveNext
Next

Et mon msgbox n'affiche que la dernière valeur de chaque variable...
Messages postés
7532
Date d'inscription
jeudi 13 septembre 2007
Statut
Contributeur
Dernière intervention
17 septembre 2021
656
C'est mieux de faire comme l'exemple
mais essaie ceci:
For x = 0 To oraDynaSet.RecordCount - 1 
dat = oraDynaSet.Fields(0).Value  
mt = oraDynaSet.Fields(1).Value 
message = message & dat & " : " & mt & vbLf 'retour à la ligne
oraDynaSet.MoveNext 
Next
MsgBox message 
Messages postés
62
Date d'inscription
mercredi 4 mai 2016
Statut
Membre
Dernière intervention
28 mars 2019
1
Le Pivert : UN ENORME MERCI !!!