无法更新数据库中的记录

jus*_*d98 0 database vb.net ms-access visual-studio

我正在为我的课程做一个家庭作业/修订课程.我正在按照这个教程http://www.homeandlearn.co.uk/NET/nets12p9.html关于如何建立数据库但是我的更新按钮有问题(btnUpdate)

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click

    txtFirstName.Text = ds.Tables("Users").Rows(inc).Item(1) = txtFirstName.Text
    txtSurname.Text = ds.Tables("Users").Rows(inc).Item(2) = txtSurname.Text
    txtUsername.Text = ds.Tables("Users").Rows(inc).Item(3) = txtUsername.Text
    txtPassword.Text = ds.Tables("Users").Rows(inc).Item(4) = txtPassword.Text
    txtClass.Text = ds.Tables("Users").Rows(inc).Item(5) = txtClass.Text
    txtAdmin.Text = ds.Tables("Users").Rows(inc).Item(6) = txtAdmin.Text
    txtHWP.Text = ds.Tables("Users").Rows(inc).Item(7) = txtHWP.Text

    MessageBox.Show("Data updated")
End Sub
Run Code Online (Sandbox Code Playgroud)

如果我在此文本框中更改了whatevers,然后单击 发生这种情况,除了我改变的文本框之外,一切都变为TRUE

Public Class AdminEditUsers 'this is the whole code

Dim MaxRows As Integer

Dim inc As Integer
Dim con As New OleDb.OleDbConnection 'THE CONNECTION OBJECT 

Dim dbProvider As String 'HOLDS THE PROVIDER 
Dim dbSource As String 'HOLDS THE DATA SOURCE 
Dim MyDocumentsFolder As String 'HOLDS THEDOCUMENTS FOLDER 
Dim TheDatabase As String 'HOLDS THE DATABASE NAME 
Dim FullDatabasePath As String 'HOLDS THE DATABASE PATH 

Dim ds As New DataSet 'HOLDS A DataSet OBJECT 
Dim da As OleDb.OleDbDataAdapter 'HOLDS A DataAdapter OBJECT 
Dim sql As String 'HOLDS A SQL STRING 

Private Sub AdminEditUsers_load(sender As Object, e As EventArgs) Handles Me.Load


    'SET UP THE PROVIDER 
    dbProvider = "PROVIDER=Microsoft.ACE.OLEDB.12.0;"

    'SET THE DATABASE AND WHERE THE DATABASE IS 
    TheDatabase = "\Visual Studio 2015/NEW_database.accdb"
    MyDocumentsFolder = Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)
    FullDatabasePath = MyDocumentsFolder & TheDatabase

    'SET THE DATA SOURCE 
    dbSource = "Data Source = " & FullDatabasePath

    'SET THE CONNECTION STRING 
    con.ConnectionString = dbProvider & dbSource

    'OPEN THE DATABASE 
    con.Open()

    'STORE THE SQL STRING 
    sql = "Select * FROM tbl_user"

    'PASS THE SQL STRING AND CONNECTION OBJECT TO THE DATA_ADAPTER 
    da = New OleDb.OleDbDataAdapter(sql, con)

    'Fill the dataset with records from the database table
    da.Fill(ds, "Users")

    'CLOSE THE DATABASE 
    con.Close()
    'Counts how many rows are in the table
    MaxRows = ds.Tables("Users").Rows.Count

    inc = -1

End Sub
Private Sub NavigateRecords()
    txtFirstName.Text = ds.Tables("Users").Rows(inc).Item(1)
    txtSurname.Text = ds.Tables("Users").Rows(inc).Item(2)
    txtUsername.Text = ds.Tables("Users").Rows(inc).Item(3)
    txtPassword.Text = ds.Tables("Users").Rows(inc).Item(4)
    txtClass.Text = ds.Tables("Users").Rows(inc).Item(5)
    txtAdmin.Text = ds.Tables("Users").Rows(inc).Item(6)
    txtHWP.Text = ds.Tables("Users").Rows(inc).Item(7)

End Sub

Private Sub btnNext_Click(sender As Object, e As EventArgs) Handles btnNext.Click
    If inc <> MaxRows - 1 Then
        inc = inc + 1
        NavigateRecords()
    Else
        MessageBox.Show("No More Rows")
    End If
End Sub

Private Sub btnPrevious_Click(sender As Object, e As EventArgs) Handles btnPrevious.Click
    If inc > 0 Then
        inc = inc - 1
        NavigateRecords()

    ElseIf inc = -1 Then
        MessageBox.Show("No Records Yet")

    ElseIf inc = 0 Then
        MessageBox.Show("First Record")
    End If
End Sub

Private Sub btnLast_Click(sender As Object, e As EventArgs) Handles btnLast.Click
    If inc <> MaxRows - 1 Then
        inc = MaxRows - 1
        NavigateRecords()
    End If
End Sub

Private Sub btnFirst_Click(sender As Object, e As EventArgs) Handles btnFirst.Click
    If inc <> 0 Then
        inc = 0
        NavigateRecords()
    End If
End Sub

Private Sub btnAddNew_Click(sender As Object, e As EventArgs) Handles btnAddNew.Click

End Sub

Private Sub btnCommit_Click(sender As Object, e As EventArgs) Handles btnCommit.Click

End Sub

Private Sub btnUpdate_Click(sender As Object, e As EventArgs) Handles btnUpdate.Click

    txtFirstName.Text = ds.Tables("Users").Rows(inc).Item(1) = txtFirstName.Text
    txtSurname.Text = ds.Tables("Users").Rows(inc).Item(2) = txtSurname.Text
    txtUsername.Text = ds.Tables("Users").Rows(inc).Item(3) = txtUsername.Text
    txtPassword.Text = ds.Tables("Users").Rows(inc).Item(4) = txtPassword.Text
    txtClass.Text = ds.Tables("Users").Rows(inc).Item(5) = txtClass.Text
    txtAdmin.Text = ds.Tables("Users").Rows(inc).Item(6) = txtAdmin.Text
    txtHWP.Text = ds.Tables("Users").Rows(inc).Item(7) = txtHWP.Text

    MessageBox.Show("Data updated")
End Sub

Private Sub btnDelete_Click(sender As Object, e As EventArgs) Handles btnDelete.Click

End Sub

Private Sub btnClear_Click(sender As Object, e As EventArgs) Handles btnClear.Click

End Sub
Run Code Online (Sandbox Code Playgroud)

结束班

Dav*_*vid 5

你在哪里实际更新数据库?

阅读该教程中的另一段:

关闭程序,然后再次运行.单击"下一个记录"按钮以移至第一个记录.它仍然是"约翰史密斯".您更新的数据已丢失!所以在这里,原因是:

"对DataSet进行了更改,而不是对数据库进行了更改"

本教程向您展示如何将这些更改持久保存到数据库:

da.Update(ds, "AddressBook")
Run Code Online (Sandbox Code Playgroud)

编辑:你似乎在这样的行上犯了一个错误:

txtFirstName.Text = ds.Tables("Users").Rows(inc).Item(1) = txtFirstName.Text
Run Code Online (Sandbox Code Playgroud)

这可能在不同语言中表现不同.例如,在C#中,我认为赋值的结果是赋值的值,所以这样的东西可能会起作用.但是在VB中,使用相同的运算符时存在语义上下文差异.赋值运算符(=)也是比较运算符,具体取决于上下文.

所以我怀疑这行代码比较后两个项目,并且分配的比较(结果TrueFalse)的第一个项目.

坚持教程向您展示的内容,只需将值分配给数据:

ds.Tables("Users").Rows(inc).Item(1) = txtFirstName.Text
Run Code Online (Sandbox Code Playgroud)

也没有必要尝试将值分配回您获得值的文本框,因为逻辑上该值已经存在.