Résultats de requête Sql en Vba

Résolu
1Globule Messages postés 62 Statut Membre -  
1Globule Messages postés 62 Statut Membre -
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. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
     
    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
  2. 1Globule Messages postés 62 Statut Membre 2
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  3. 1Globule Messages postés 62 Statut Membre 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 ?
    0
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      Il te faut faire une boucle voir ceci:

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

      @+ Le Pivert
      0
  4. 1Globule Messages postés 62 Statut Membre 2
     
    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
    1. cs_Le Pivert Messages postés 8437 Statut Contributeur 730
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. 1Globule Messages postés 62 Statut Membre 2
     
    Le Pivert : UN ENORME MERCI !!!
    0