如何使用Visual Basic .net从同一访问数据库更新不同的表

时间:2019-02-16 06:32:25

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

我将“注册系统”访问数据库添加到了“注册系统vb.net”表单中,作为数据源。数据库中有2个表,即accountTable和studentEnrollmentInformation。我将accountTable的详细信息和数据网格视图拖到了表单设计器中。以下代码自动出现在代码设计器中:

Private Sub AccountTableBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
    Me.Validate()
    Me.AccountTableBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.EnrollmentSystemDataBaseDataSet)
End Sub



Private Sub enrollmentSystem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Me.AccountTableTableAdapter.Fill(Me.EnrollmentSystemDataBaseDataSet.accountTable)     
End Sub

以下代码可用于更新accounTableDataGridView,但不适用于StudentEnrollmentInformationDataGridView,因此我手动创建了一个 用于StudentEnrollmentInformation。

Function updateStudent()
        Me.Validate()
        Me.StudentEnrollmentInformationBindingSource.EndEdit()
        Me.TableAdapterManager.UpdateAll(Me.EnrollmentSystemDataBaseDataSet)
       Me.StudentEnrollmentInformationTableAdapter.Fill(Me.EnrollmentSystemDataBaseDataSet.studentEnrollmentInformation)
End Function

这是包含更新代码的函数,我已手动创建了这些更新代码以更新studentEnrollmentDataGridView。添加新行效果很好,但是当我尝试更新studentEnrollmentDataGridView时,表中的文本消失,并且不会更新/保存。我还具有用于更新工作正常的accountTableDataGridView的功能。

Function update() 'THIS FUNCTION CONTAINS PRE-MADE CODE TO MAKE UPDATING SHORTER IN WRITING CODE.
    Me.Validate()
    Me.AccountTableBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.EnrollmentSystemDataBaseDataSet)
    Me.AccountTableTableAdapter.Fill(Me.EnrollmentSystemDataBaseDataSet.accountTable)
End Function

我的问题是如何更新系统中的多个表?更新另一个表可以正常工作,但另一个则不能。

1 个答案:

答案 0 :(得分:0)

在原始的自动生成的代码中,这是首先检索数据的行:

Private Sub enrollmentSystem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Me.AccountTableTableAdapter.Fill(Me.EnrollmentSystemDataBaseDataSet.accountTable)     
End Sub

在加载表单时,将帐户数据检索到已经绑定的DataTable中。如果您也想检索学生入学数据,请在同一位置进行处理:

Private Sub enrollmentSystem_Load(sender As Object, e As EventArgs) Handles MyBase.Load
     Me.AccountTableTableAdapter.Fill(Me.EnrollmentSystemDataBaseDataSet.accountTable)
     Me.StudentEnrollmentInformationTableAdapter.Fill(Me.EnrollmentSystemDataBaseDataSet.studentEnrollmentInformation)
End Sub

现在,您将在加载表单时填充两个绑定的DataTables。在保存时,您可以执行相同的操作,即,将代码保存以将更改保存到另一个DataTable,您已经在其中保存了第一个代码:

Private Sub AccountTableBindingNavigatorSaveItem_Click(sender As Object, e As EventArgs)
    Me.Validate()
    Me.AccountTableBindingSource.EndEdit()
    Me.StudentEnrollmentInformationBindingSource.EndEdit()
    Me.TableAdapterManager.UpdateAll(Me.EnrollmentSystemDataBaseDataSet)
End Sub

您不需要任何代码来专门保存来自DataTable的更改,因为UpdateAll的全部意义在于它会更新DataTables中的所有DataSet

和往常一样,如果它似乎无法按预期工作,则可以对其进行调试。在这种情况下,这意味着要在UpdateAll行上设置一个断点,并在调用之前和之后检查DataSet的确切状态,并可能还要检查数据库的状态。