Résultats de requête Sql en Vba

Résolu/Fermé
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 - 5 févr. 2019 à 09:27
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 - 5 févr. 2019 à 12:33
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 !
A voir également:

5 réponses

cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 févr. 2019 à 11:25
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


0
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 2
5 févr. 2019 à 11:43
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...
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 5 févr. 2019 à 11:59
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
0
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 2
5 févr. 2019 à 12:00
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 ?
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
5 févr. 2019 à 12:06
Il te faut faire une boucle voir ceci:

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

@+ Le Pivert
0
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 2
5 févr. 2019 à 12:16
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...
0
cs_Le Pivert Messages postés 7903 Date d'inscription jeudi 13 septembre 2007 Statut Contributeur Dernière intervention 11 mars 2024 728
Modifié le 5 févr. 2019 à 12:27
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 
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
1Globule Messages postés 62 Date d'inscription mercredi 4 mai 2016 Statut Membre Dernière intervention 28 mars 2019 2
5 févr. 2019 à 12:33
Le Pivert : UN ENORME MERCI !!!
0