Bonjour voila mon petit pb,
PB : j'ai actuellement une BASE de données sous SQL server, avec 2 requetes je crée 2 dataset différents (l'un contenant des ID de personne + des roles associées, l'autre contenant l'ID de personnes + toutes leurs données relatives)
Le but est de maxer le tout pour associer les roles avec ces personnes (certaines personnes peuvent avoir plusieurs roles)
L'idée de depart etait d'ecrire le resultat dans un fichier excel (qui marche impecc)
je vous link le code etape par etape :
Connection a la base
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15 Sub ChargeTable(ByVal RqtCtc As String, ByVal TableName As String, ByVal DatasetCtc As System.Data.DataSet) Dim con As New SqlConnection() Dim sqlda As SqlDataAdapter con = New SqlConnection(con_strg) con.Open() sqlda = New SqlDataAdapter(RqtCtc, con) Try ' Récupération des données dans une table nomtable sqlda.Fill(DatasetCtc, TableName) Catch ex As Exception MsgBox(ex.ToString) Finally con.Close() End Try End Sub
Création des dataset role et contacts
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37 Sub rapport_excel(ByVal requete As String, ByVal requete2 As String) Dim d As String = Format(Today, "yyyMMdd") Dim d2 As String = Format(Now, "HH-mm") 'Création du DataSet contact Dim data As New Data.DataSet() Try ChargeTable(requete, "RECHERCHE", data) Catch ex As Exception MsgBox(ex.ToString) Exit Sub End Try 'Ici on compte le nombre de lignes et de colonnes du datatable Dim NbRow As Integer = 0 Try NbRow = data.Tables("RECHERCHE").Rows.Count Catch ex As Exception End Try Dim nbcol As Integer = data.Tables("RECHERCHE").Columns.Count 'Création du DataSet role Dim data2 As New Data.DataSet() Try ChargeTable(requete2, "RECHERCHE", data2) Catch ex As Exception MsgBox(ex.ToString) Exit Sub End Try 'Ici on compte le nombre de lignes et de colonnes du datatable Dim NbRow2 As Integer = 0 Try NbRow2 = data2.Tables("RECHERCHE").Rows.Count Catch ex As Exception End Try Dim nbcol2 As Integer = data2.Tables("RECHERCHE").Columns.Count
Ecriture de mes resultat dans un fichier excel :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30 Dim x As Integer Dim y As Integer Dim xlSheet As New Excel.Worksheet xlSheet = xlApp.Workbooks.Add.ActiveSheet xlSheet.Name = "Feuil1" For y = 0 To nbcol - 1 For x = 0 To NbRow - 1 'En tête xlSheet.Cells(1, y + 1) = data.Tables("RECHERCHE").Columns(y).ColumnName 'On rempli la case xlSheet.Cells(x + 2, y + 1) = data.Tables("RECHERCHE").Rows(x).Item(y).ToString Next For x = 0 To NbRow - 1 xlSheet.Cells(x + 2, y + 16) = Rolexist(data.Tables("RECHERCHE").Rows(x).Item(y).ToString, data2) Next Next xlSheet.SaveAs("C:\" + d.ToString + " " + d2.ToString + ".xml") xlSheet = Nothing 'On quitte l'application et on détruit les objets xlApp.Quit() xlApp = Nothing
La fonctione "roleexist" qui permet de macther les deux dataset en utilisant les ID des personne et qui permet de rajouter une colonne "role" au dataset contact
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 Function Rolexist(ByVal Code As String, ByVal role As DataSet) As String Dim x As Integer Rolexist = "" Try For x = 0 To role.Tables("RECHERCHE").Rows.Count - 1 If Code = role.Tables("RECHERCHE").Rows(x).Item(0).ToString() Then Rolexist += role.Tables("RECHERCHE").Rows(x).Item(1).ToString() + Chr(13) End If Next Catch ex As Exception MsgBox(ex.Message) End Try Return Rolexist End Function
j'aimerais au lieu d'ecrire dans mes cellules excel ecrire dans un fichier XML,
j'ai deja essayé la methode WriteXML pour les dataset mais elle ne me satisfait pas.
J'aimerais le créer a la main avec des print#1 "[[CDATA etc...."
si quelqu'un m'a comprisje sollicite son aide
![]()
Partager