如何使用visual basic中的数据集更新MS Access数据库?

时间:2015-10-26 18:57:07

标签: vba ms-access

您好我正在开发一个关于Visual Basic 2010的项目,我现在所困扰的是更新我的MS Access数据库,该数据库是通过按钮点击触发的。

我已经建立了连接和数据适配器,并为数据适配器生成了数据集,并且我已经使用了数据集。我想要做的是从用户输入的数据网格视图条目中读取并将这些更改保存到数据集,最后使用oledbdataadapter.update(dataset)命令将数据集保存回数据库。我尝试了一切,我已经卡住了一段时间,代码中没有错误,我可以看到对数据集所做的更改是成功的,我可以查看它们(我得到了"更新成功"在尝试结束时所以我确信代码正在执行直到那时并没有去异常),但我根本没有看到数据库中的变化。 以下是代码,我将感谢您提供的任何帮助,谢谢。

          For j As Integer = 6 To DataGridView1.Rows.Count
        Try

            Dim s As String = DataGridView1.Rows(j).Cells(0).Value
            Dim Quantaties As Integer = DataGridView1.Rows(j).Cells(3).Value
            For i As Integer = 0 To DataSet21.Tables("Stock").Rows.Count


                Dim foundRow As DataRow = DataSet21.Tables("Stock").Rows.Find(i)

                If foundRow IsNot Nothing Then
                    If foundRow(1) = s Then
                        DataSet21.Tables("Stock").Rows(i).Item(7) = Quantaties

                        DataSet21.AcceptChanges()
                        Try
                            Dim builder As New OleDbCommandBuilder(OleDbDataAdapter1)
                            Me.Validate()
                            OleDbDataAdapter1.UpdateCommand = builder.GetUpdateCommand()
                            OleDbDataAdapter1.Update(DataSet21.Stock)
                            DataSet21.AcceptChanges()
                            MsgBox("Update successful")

                        Catch ex As Exception
                            MsgBox("Update failed")
                        End Try
                    End If

                End If
            Next
            BindingSource1.EndEdit()
        Catch ex As Exception

        End Try

    Next

1 个答案:

答案 0 :(得分:0)

谢谢你的回复。 我想这两种方式都适用于OleDbDataAdapter1.Update(DataSet21.Stock)和OleDbDataAdapter1.Update(" DataSet21"),因为我弄清楚我的代码出了什么问题。问题出在DataSet21.AcceptChanges()中,我不应该把它放在OleDbDataAdapter1.Update(DataSet21.Stock)之前。

OleDbDataAdapter.update()将数据集中所做的更改保存到数据库中,而dataset.acceptchanges()使数据集保存对其所做的更改,使其看起来不再有变化。所以OleDbDataAdapter.update()没有执行,因为数据集由于数据集而没有对它进行任何更改.acceptchanges()

所以我所做的是删除dataset.acceptchanges(),它终于工作了。我的代码现在看起来像这样。

      For j As Integer = 6 To DataGridView1.Rows.Count
        Try

            Dim s As String = DataGridView1.Rows(j).Cells(0).Value
            Dim Quantaties As Integer = DataGridView1.Rows(j).Cells(3).Value
            For i As Integer = 0 To DataSet21.Tables("Stock").Rows.Count


                Dim foundRow As DataRow = DataSet21.Tables("Stock").Rows.Find(i)

                If foundRow IsNot Nothing Then
                    If foundRow(1) = s Then
                        DataSet21.Tables("Stock").Rows(foundRow(0) - 2).Item(7) = Quantaties

                        Try
                            BindingSource1.EndEdit()
                            OleDbDataAdapter1.Update(DataSet21.Stock)


                            MsgBox("Update successful")


                        Catch ex As Exception
                            MsgBox("Update failed")
                        End Try
                    End If

                End If
            Next
        Catch ex As Exception

        End Try

    Next