如何编辑访问数据库中的特定实体
How to edit a specific entity inside an access database
我创建了一个访问数据库,用于存储用户创建的所有抽认卡。
这是:
当用户创建抽认卡时,难度设置为 3,用户可以通过 txtDifficulty 更改难度
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim sql As String
sql = "UPDATE flashcards set difficulty = " & TxtDifficulty.Text 'Changes difficulty to user input
runSQL(sql) 'runs SQL
End Sub
上述代码的问题在于它编辑了数据库中的每一个抽认卡,而不仅仅是单个抽认卡。
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim sql As String
sql = "UPDATE flashcards set difficulty = " & TxtDifficulty.Text 'Changes difficulty to user input
sql = sql & "WHERE Front = " & txtFront.Text
runSQL(sql) 'runs SQL
End Sub
我编辑了上面的代码,我认为它只会编辑数据库中 Front 等于 txtfront.text 的地方,这是向用户显示抽认卡的文本框,但这只会产生错误.
我想知道如何只编辑用户所在的特定抽认卡。我猜这可能与访问数据库中的唯一标识符有关,但我不确定如何实现它
你的想法“只编辑数据库中 Front 等于 txtfront.text 的地方”是个好主意,但是将值连接到 SQL 查询中充满了潜在的问题。
如果将值作为 SQL 参数传递给查询,那么您无需担心在值周围加上引号,这是问题中代码的问题之一。
您可以将 SQL 查询写在多行上以使其更易于阅读:查询中的额外空格是可以的,但不能有空格(问题中代码的另一个问题)是个问题,一般是语法错误。
如果将数据库操作保存在单独的方法中,它会将代码的每个部分保存在自己的方法中,这样可以更容易地确保每个部分都在做它应该做的事情,也更容易维护。
Sub UpdateDifficultyLevel(front As String, difficulty As Integer)
Dim sql = "UPDATE flashcards SET difficulty = ?
WHERE Front = ?"
Using conn As New OleDbConnection("yourConnectionStringHere"),
cmd As New OleDbCommand(sql, conn)
cmd.Parameters.Add("@difficulty", OleDbType.Integer).Value = difficulty
cmd.Parameters.Add("@front", OleDbType.VarWChar).Value = front
conn.Open()
cmd.ExecuteNonQuery()
End Using
End Sub
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim difficulty As Integer
If Integer.TryParse(TxtDifficulty.Text, difficulty) Then
Dim front = txtFront.Text
UpdateDifficultyLevel(front, difficulty)
Else
' tell user that the difficulty must be a number
End If
End Sub
参数在查询中用问号表示,您必须按照使用顺序添加参数。为每个参数命名(“@front”等)只是为了更容易看出哪个是哪个(如果使用另一个数据库,例如 SQL Server,则实际上会使用该名称) .
Using
语句确保任何“非托管资源”在使用后被释放。
您可能还需要在更新查询中使用 UserID,但我无法从问题中判断。
我创建了一个访问数据库,用于存储用户创建的所有抽认卡。
这是:
当用户创建抽认卡时,难度设置为 3,用户可以通过 txtDifficulty 更改难度
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim sql As String
sql = "UPDATE flashcards set difficulty = " & TxtDifficulty.Text 'Changes difficulty to user input
runSQL(sql) 'runs SQL
End Sub
上述代码的问题在于它编辑了数据库中的每一个抽认卡,而不仅仅是单个抽认卡。
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim sql As String
sql = "UPDATE flashcards set difficulty = " & TxtDifficulty.Text 'Changes difficulty to user input
sql = sql & "WHERE Front = " & txtFront.Text
runSQL(sql) 'runs SQL
End Sub
我编辑了上面的代码,我认为它只会编辑数据库中 Front 等于 txtfront.text 的地方,这是向用户显示抽认卡的文本框,但这只会产生错误.
我想知道如何只编辑用户所在的特定抽认卡。我猜这可能与访问数据库中的唯一标识符有关,但我不确定如何实现它
你的想法“只编辑数据库中 Front 等于 txtfront.text 的地方”是个好主意,但是将值连接到 SQL 查询中充满了潜在的问题。
如果将值作为 SQL 参数传递给查询,那么您无需担心在值周围加上引号,这是问题中代码的问题之一。
您可以将 SQL 查询写在多行上以使其更易于阅读:查询中的额外空格是可以的,但不能有空格(问题中代码的另一个问题)是个问题,一般是语法错误。
如果将数据库操作保存在单独的方法中,它会将代码的每个部分保存在自己的方法中,这样可以更容易地确保每个部分都在做它应该做的事情,也更容易维护。
Sub UpdateDifficultyLevel(front As String, difficulty As Integer)
Dim sql = "UPDATE flashcards SET difficulty = ?
WHERE Front = ?"
Using conn As New OleDbConnection("yourConnectionStringHere"),
cmd As New OleDbCommand(sql, conn)
cmd.Parameters.Add("@difficulty", OleDbType.Integer).Value = difficulty
cmd.Parameters.Add("@front", OleDbType.VarWChar).Value = front
conn.Open()
cmd.ExecuteNonQuery()
End Using
End Sub
Private Sub btnSubmit_Click(sender As Object, e As EventArgs) Handles btnSubmit.Click
Dim difficulty As Integer
If Integer.TryParse(TxtDifficulty.Text, difficulty) Then
Dim front = txtFront.Text
UpdateDifficultyLevel(front, difficulty)
Else
' tell user that the difficulty must be a number
End If
End Sub
参数在查询中用问号表示,您必须按照使用顺序添加参数。为每个参数命名(“@front”等)只是为了更容易看出哪个是哪个(如果使用另一个数据库,例如 SQL Server,则实际上会使用该名称) .
Using
语句确保任何“非托管资源”在使用后被释放。
您可能还需要在更新查询中使用 UserID,但我无法从问题中判断。