Bonjour,
Je fais appel à ce forum pour un problème qui me bloque depuis plusieurs semaines :
C'est la première fois que développe une application de gestion de données en utilisant OleDB pour gérer des contacts pour une association (pas trop le choix car j'ai + de 3000 lignes de contacts à gérer).
Ce que je cherche à faire, c'est :
- de charger les données Excel dans l'appli,
- de pouvoir faire des modifs directement par le datagridview,
- puis de sauvegarder les modifications faites dans le datagridview dans le fichier Excel.
Pour l'instant, et malgré beaucoup de temps passé, voici où j'en suis :
Chargement des données Excel dans le datagridview (en datasource) => OK
=> Par contre, pas moyen de sauvegarder les modifs que j'apporte à la datagridview !!
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 Private Sub ReadExcelFile(DGV As DataGridView, cheminXL As String) ds = New DataSet() If System.IO.Path.GetExtension(XLfilepath) = "xls" Then _ connectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & cheminXL & "; Extended Properties=""Excel 8.0;HDR=YES;IMEX=1;""" _ Else connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & cheminXL & "; Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1;""" Using conn As OleDbConnection = New OleDbConnection(connectionString) conn.Open() Dim cmd As OleDbCommand = New OleDbCommand() cmd.Connection = conn 'Get all Sheets in Excel File Dim dtSheets As DataTable = conn.GetOleDbSchemaTable(OleDbSchemaGuid.Tables, Nothing) 'Loop through all Sheets to get data For Each dr As DataRow In dtSheets.Rows Dim sheetName As String = dr("TABLE_NAME").ToString() If Not sheetName.EndsWith("$") Then Continue For 'Get all rows from the Sheet cmd.CommandText = "SELECT * FROM [" & sheetName & "]" Dim dt As DataTable = New DataTable() dt.TableName = sheetName da = New OleDbDataAdapter(cmd) Dim cb = New OleDbCommandBuilder(da) da.Fill(dt) ds.Tables.Add(dt) Next cmd = Nothing conn.Close() End Using End Sub
Voici le code actuel que j'utilise :
Au final, ce code semble fonctionner (dataset rempli, table remplie avec le bon nom, etc...), mais il bloque à chaque fois sur :
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 Sub Button2Click(sender As Object, e As EventArgs) Handles button2.Click 'boutn sauvegarde connectionString = "Provider=Microsoft.ACE.OLEDB.12.0;Data Source=" & XLfilepath & "; Extended Properties=""Excel 12.0 XML;HDR=YES;IMEX=1;""" conn = New OleDbConnection(connectionString) conn.Open() ds.Tables(0).PrimaryKey = New DataColumn() {ds.Tables(0).Columns("id")} da = New OleDbDataAdapter("Select * from [contacts$]", conn) 'contacts est le nom de l'onglet excel, et donc de la table Dim cb = New OleDbCommandBuilder(da) cb.QuotePrefix = "[" cb.QuoteSuffix = "]" da.Update(ds.Tables(0)) Me.ds.AcceptChanges() conn.Close() End Sub
"La génération SQL dynamique de UpdateCommand n'est pas prise en charge pour un SelectCommand qui ne retourne pas des informations de colonne clé."
Avez-vous une idée, car j'ai épuisé toutes les solutions que j'ai pu trouver...![]()
Partager