2016-01-31 3 views
0

как я могу заполнить несколько table на несколько DataGridview? например, у меня есть 3 таблицы, которые являются table1, table2 и table3, и в моей форме у меня есть 3 dataGridView с именем dataGridView1, dataGridView2 и dataGridView3. Я нашел это решение Updating an Access Database via a DataGridView Using OLEDB in VB.NET в результате моего кода.Visual Studio - несколько таблиц для нескольких DataGridView с MS Access

функция loadDatabaseDataToGridView

Dim msAccessFilePath As String 
Dim con As New OleDbConnection 
Dim dataTable, dataTable2, dataTable3, dataTable4 As New DataTable 
Dim olebDataAdapter As New OleDbDataAdapter 
Dim da As New OleDbDataAdapter 
Dim dataSet As New DataSet 

Private Sub loadDatabaseDataToGridView() 
     Try 
      con.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & msAccessFilePath 
      dataSet.Tables.Add(dataTable) 

      olebDataAdapter = New OleDbDataAdapter("Select * from table1", con) 
      olebDataAdapter.Fill(dataTable) 
      olebDataAdapter = New OleDbDataAdapter("Select * from table2", con) 
      olebDataAdapter.Fill(dataTable2) 
      olebDataAdapter = New OleDbDataAdapter("Select * from table3", con) 
      olebDataAdapter.Fill(dataTable3) 

      DataGridView1.DataSource = dataTable.DefaultView 
      DataGridView2.DataSource = dataTable2.DefaultView 
      DataGridView3.DataSource = dataTable3.DefaultView 

      Dim cb = New OleDbCommandBuilder(olebDataAdapter) 
      cb.QuotePrefix = "[" 
      cb.QuoteSuffix = "]" 
      MessageBox.Show("Successfull") 

     Catch ex As Exception 
      MessageBox.Show("Failed") 
      con.Close() 
     End Try 
     con.Close() 
    End Sub 

функция SaveChanges

'Perform this on Button Save is Click 
Private Sub saveChanges() 
    olebDataAdapter.Update(dataSet) 
End Sub 

Этот код работает, как excpected, она заселение данные from MS Access file, но когда я нажал на кнопку Сохранить, чтобы сохранить изменения при редактировании данных произошла ошибка.

ОШИБКА:

Concurrency violation: the UpdateCommand affected 0 of the expected 1 records 

кто знает, как правильно реализовать то, что я пытаюсь добиться? Большое спасибо!!!

+0

Создание нового экземпляра OleDbDataAdapter для каждой таблицы приведет к тому, что команда Update будет работать только с последней таблицей. Не могли бы вы добавить, какое сообщение об ошибке получено? – Steve

+0

Я уже обновляю свой вопрос, пожалуйста, проверьте. Благодаря! – bernzkie

+0

Эти ошибки, похоже, связаны с вашим файлом. У вас есть доступ к открытому в представлении дизайна таблицы? – Steve

ответ

0

В каждом объекте DataAdapter имеется только одна UpdateCommand, поэтому вам понадобится одна для каждой таблицы данных. Если он запускает команду обновления, и никакие строки не обновляются (потому что команда обновления на самом деле для таблицы, которую вы не изменили), вы получите нарушение параллелизма.

Это действительно усложняется, если это связано с тем, что ваши таблицы связаны с порядком вставки, обновлениями и удалениями.

Если вы создаете сильно типизированный набор данных, он генерирует дизайнерский код, который включает класс TableAdapterManager и все необходимые адаптеры данных. Возможно, стоит поиграть с этим, чтобы вы могли видеть, как работает сгенерированный код.

Только примечание, исключение «Нарушение параллелизма» на самом деле существует, поэтому вы можете создать команду обновления, которая будет успешной только в том случае, если содержимое записи в базе данных соответствует данным, хранящимся локально (чтобы предотвратить перезапись другого пользовательские изменения). Найдите оптимистическую блокировку для получения более подробной информации.

+0

Спасибо! у вас есть какой-то конкретный код, например, для этого? Я так смущен этим. – bernzkie

+0

что я на самом деле делаю здесь, просматриваю файл .mdb (MS Access) и загружаю данные из 3-х таблиц в 3 dataGridView. Благодарю. – bernzkie

+0

Приватный odaList как новый список (OleDbDataAdapter) – John0987

Смежные вопросы