Requête SQL avec OleDbDataAdapter

Résolu
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 22 mars 2015 à 23:19
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 - 23 mars 2015 à 09:22
Bonsoir le Forum,

Je créé dynamiquement des boutons dans une Form via lecture d'un fichier Excel.

Structure du fichier Excel , feuille Job:
Environnement Application Job
SV_CLIENT1 JOURNALIERE ENTJSAUVE080
SV_CLIENT1 JOURNALIERE ENTJSAUVE100
SV_CLIENT2 JOURNALIERE MASJSAUVE050
SV_CLIENT2 MENSUELLE MASJSAUVE300
....

Pas de souci pour mon premier bouton
        Try
cn.ConnectionString = "Provider=Microsoft.ACE.OLEDB.12.0;" & _
"Data Source=" & PathTeam & Customers.Keys(0) & FilePDP & _
"; Extended Properties=""Excel 12.0;HDR=YES;Persist Security Info=False" & """"

Dim MyQuery As String = " SELECT Job FROM [Jobs$] WHERE [Job] IS NOT NULL"
cn.Open()
da = New OleDb.OleDbDataAdapter(MyQuery, cn)
da.Fill(ds, "Job")
count = ds.Tables(0).Rows.Count.ToString
da.Dispose()
ds.Clear()
cn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "CreateButtonsSaveMutu")
Finally
End Try

Dim MyButton As New Button()
MyButton.Location = New Point(705, intPos)
MyButton.Height = 40
MyButton.Width = 180
MyButton.Text = "* [Tous les clients]" & " ( " & count & " )"
MyButton.Name = MyLabel4.Text
MyButton.Tag = "*"
MyButton.BackColor = Color.Cornsilk
intPos = intPos + 42
Me.Controls.Add(MyButton)
AddHandler MyButton.Click, AddressOf MyButton_Click


Mon problème, je souhaiterai créer les boutons :
SV_CLIENT1 (nombre de jobs)
SV_CLIENT2 (nombre de jobs)
...


        Try
cn.ConnectionString = " Provider=Microsoft.ACE.OLEDB.12.0;" & _
" Data Source=" & PathTeam & Customers.Keys(0) & FilePDP & _
"; Extended Properties=""Excel 12.0;HDR=YES;Persist Security Info=False" & """"
Dim MyQuery As String = " SELECT COUNT(*), Environnement " & _
" FROM [Jobs$] WHERE [Environnement] IS NOT NULL " & _
" GROUP BY [Environnement]"
cn.Open()
da = New OleDb.OleDbDataAdapter(MyQuery, cn)
da.Fill(ds, "Environnement")

For Each cRow In ds.Tables(1).Rows
MessageBox.Show("Check environnement" & vbCrLf & vbCrLf & cRow("Environnement").ToString() & _
vbCrLf & vbCrLf & ds.Tables(1).Rows.Count.ToString & _
vbCrLf & vbCrLf & "test", "Check SAVEMUTU - Client")
Exit For
Next

da.Dispose()
ds.Clear()
cn.Close()
Catch ex As Exception
MessageBox.Show(ex.Message, "CreateButtonsSaveMutu")
End Try


ds.Tables(1).Rows.Count.ToString me donne bien le nombre de client.
La boucle "For Each cRow In ds.Tables(1).Rows" m'énumère correctement le noms des clients (Environnement).
Comment récupérer le Count(*) des jobs pour chaque client ???

Merci pour vos suggestions.
jean-marc

2 réponses

cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
22 mars 2015 à 23:33
Correction:

ds.Tables(1).Rows.Count.ToString me donne bien le nombre de jobs pour tous les clients (Environnement).

La boucle "For Each cRow In ds.Tables(1).Rows" m'énumère correctement le nom des clients (Environnement).
0
ucfoutu Messages postés 18038 Date d'inscription lundi 7 décembre 2009 Statut Modérateur Dernière intervention 11 avril 2018 211
23 mars 2015 à 07:21
Bonjour,
As-tu essayé ainsi ===>>
Select Environnement, Count(*) From .....
0
cs_JMO Messages postés 1854 Date d'inscription jeudi 23 mai 2002 Statut Membre Dernière intervention 24 juin 2018 27
23 mars 2015 à 09:22
Bonjour Jacques,
Bonjour Jacques,

En fait c'est :
            For Each cRow In ds.Tables(1).Rows
MessageBox.Show("Check environnement" & vbCrLf & vbCrLf & cRow("Environnement").ToString() & _
vbCrLf & vbCrLf & ds.Tables(1).Rows.Count.ToString & _
vbCrLf & vbCrLf & cRow.Item(0) & vbCrLf & cRow.Item(1), "Check SAVEMUTU - Client")
Next

cRow.item(0) me retourne le nombre de SV_CLIENTx.
cRow.item(1) me retourne le nom du client

Merci et bonne journée,
@+.
jean-marc
0
Rejoignez-nous