无法更新数据库中的记录

时间:2016-03-30 13:25:56

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

我为我的课程做了一个家庭作业/修订课程。我按照本教程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

If I change whatevers in this textbox and then click update This happens, everything changes to TRUE apart from the textbox that I've changed

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

结束班

1 个答案:

答案 0 :(得分:5)

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

在该教程中阅读一个段落

  

关闭程序,然后再次运行。单击“下一个记录”按钮以移至第一个记录。它仍然是&#34; John Smith&#34;。您更新的数据已丢失!所以,这也是原因:

     

&#34;对数据集进行了更改,而不是对数据库进行了更改&#34;

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

da.Update(ds, "AddressBook")

编辑:您似乎在这样的行上犯了错误:

txtFirstName.Text = ds.Tables("Users").Rows(inc).Item(1) = txtFirstName.Text

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

所以我怀疑这行代码比较后两项,分配比较结果(True或{{1} })到第一项。

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

False

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