Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/vb.net/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Vb.net Visual Studio-具有MS Access的多表到多DataGridView_Vb.net_Visual Studio 2010_Ms Access_Datagridview - Fatal编程技术网

Vb.net Visual Studio-具有MS Access的多表到多DataGridView

Vb.net Visual Studio-具有MS Access的多表到多DataGridView,vb.net,visual-studio-2010,ms-access,datagridview,Vb.net,Visual Studio 2010,Ms Access,Datagridview,如何将多个表填充到多个数据网格视图? 例如,我有3个表,分别是table1、table2和table3,在我的表单中,我有3个名为dataGridView1、dataGridView2和dataGridView3的dataGridView。由于我的代码,我找到了这个解决方案 函数加载DatabaseDataToGridView Dim msAccessFilePath As String Dim con As New OleDbConnection Dim dataTable, dataTabl

如何将多个
填充到多个
数据网格视图
? 例如,我有3个表,分别是
table1
table2
table3
,在我的表单中,我有3个名为
dataGridView1
dataGridView2
dataGridView3
的dataGridView。由于我的代码,我找到了这个解决方案

函数加载DatabaseDataToGridView

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
功能保存更改

'Perform this on Button Save is Click
Private Sub saveChanges()
   olebDataAdapter.Update(dataSet)
End Sub
此代码按预期工作,它正在填充MS Access文件中的数据
,但当我单击“保存”按钮以保存对已编辑数据的更改时,出现了一个错误

错误:

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

有人知道如何正确地实现我的目标吗?非常感谢

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

如果表是相关的,那么实际情况会变得更复杂,因为插入、更新和删除的顺序可能非常关键

如果创建强类型数据集,它将生成包含TableAdapterManager类和所有必需数据适配器的设计器代码。为了让您能够看到生成的代码是如何工作的,您可能值得对此进行研究


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

为每个表创建OleDbDataAdapter的新实例将导致一个仅对最后一个表有效的Update命令。您可以添加收到的错误消息吗?我已经更新了我的问题,请检查。谢谢嗯,这个错误似乎与您正在使用的文件有关。您是否在相关表格的设计视图中打开了访问权限?谢谢!您是否有任何特定的代码,例如?我对这样做很困惑。我在这里实际做的是,浏览.mdb(MS Access)文件并将3表的数据加载到3 dataGridView中。谢谢。Private odaList as New List(OleDbDataAdapter的)按return键太快,无论如何:使用
Private odaList as New List(OleDbDataAdapter的)
存储数据适配器。创建新的OleDbDataAdapter对象后,只需将其添加到列表中即可。您还需要将每个数据表添加到数据集中。最后,在SaveChanges方法中,循环遍历列表并对每个OleDbDataAdapter对象调用Update。或者,添加use add->New Item(对于项目),选择Dataset,然后从工具箱中将TableAdapter拖动到新的Dataset中,并按照向导操作。这将自动生成数据库访问所需的所有代码。