Résultats de requête Sql en Vba

Résolu
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

  1. Contributeur
    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


    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...
      1. Contributeur
        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
    2. 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 ?
    3. 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...
      1. Contributeur
        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