【问题标题】:Visual Studio - multiple Table to multiple DataGridView with MS AccessVisual Studio - 使用 MS Access 的多个表到多个 DataGridView
【发布时间】:2016-01-31 09:57:34
【问题描述】:

如何将多个table 填充到多个DataGridview 中? 例如,我有 3 个表,分别是 table1table2table3,在我的表单中,我有 3 个名为 dataGridView1dataGridView2dataGridView3 的 dataGridView。由于我的代码,我找到了这个解决方案Updating an Access Database via a DataGridView Using OLEDB in VB.NET

函数 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

此代码按预期工作,它正在填充数据from MS Access file,但是当我单击按钮保存以保存对已编辑数据的更改时,发生了错误。

错误:

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

任何人都知道如何正确实现我想要实现的目标?非常感谢!!!

【问题讨论】:

  • 为每个表创建一个新的 OleDbDataAdapter 实例将导致一个仅适用于最后一个表的更新命令。你能补充一下收到的错误信息是什么吗?
  • 我已经更新了我的问题,请检查。谢谢!
  • 嗯,这个错误似乎与您正在使用的文件有关。您是否在相关表的设计视图中打开了访问权限?

标签: vb.net visual-studio-2010 ms-access datagridview


【解决方案1】:

每个 DataAdapter 对象只有一个 UpdateCommand,因此每个数据表都需要一个。如果它运行更新命令并且没有更新任何行(因为更新命令实际上是针对您尚未更改的表),那么您将获得并发冲突。

如果您的表是相关的,则实际上会比这更复杂,因为插入、更新和删除发生的顺序可能很关键。

如果您创建强类型数据集,它会生成包含 TableAdapterManager 类和所有必需数据适配器的设计器代码。可能值得尝试一下,这样您就可以了解生成的代码是如何工作的。

请注意,实际上存在“并发冲突”异常,因此您可以设计一个更新命令,该命令只有在数据库中记录的内容与本地保存的数据匹配时才会成功(以防止您覆盖其他用户的变化)。搜索乐观锁定了解更多详情。

【讨论】:

  • 谢谢!你有任何特定的代码,例如这个吗?我对这样做感到很困惑。
  • 我实际上在这里做的是,浏览.mdb(MS Access)文件并将3个表的数据加载到3个dataGridView中。谢谢。
  • 私有 odaList 作为新列表(OleDbDataAdapter)
  • 按回车键太快了,无论如何:使用Private odaList as New List(of OleDbDataAdapter) 来存储数据适配器。创建新的 OleDbDataAdapter 对象后,只需将其添加到列表中。您还需要将每个数据表添加到数据集中。最后,在您的 SaveChanges 方法中,您遍历列表并在每个 OleDbDataAdapter 对象上调用 Update。或者,您添加使用 Add->New Item(对于项目),选择 Dataset,然后将 TableAdapter 从工具箱中拖到新数据集中并按照向导进行操作。这将自动生成访问数据库所需的所有代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-10
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多