在 VB 和 Access 中更新查询问题
Posted
技术标签:
【中文标题】在 VB 和 Access 中更新查询问题【英文标题】:Update query issue in VB and Access 【发布时间】:2013-02-23 10:18:09 【问题描述】:我正在尝试在 VB 的应用程序中实现更改密码模块。更新查询有一些问题
Private Sub cmdOK_Click()
Query = "Select * From Users Where LoginID='" & txtLoginID & "' and Password = '" & txtCuPassword & "'"
Set reSet = myCon.Execute(Query)
If (Not reSet.BOF) And (Not reSet.EOF) Then
Query1 = "UPDATE Users SET Password ='" & txtNewPassword & "' WHERE LoginID='" & txtLoginID & "'"
Set reSet = myCon.Execute(Query1)
执行时在 UPDATE 查询中抛出错误,作为语法错误。
【问题讨论】:
@MitchWheat 抱歉错过了,但错误也没有变化。 您的 txtNewPassword 是否包含单引号? 对了,上面的代码好像是VB6或者VBA,但是你已经标记了Visual-Studio-2010。有什么地方不对劲。 Good old little Bobby tables... @Jeyaprakash 了解如何清理您的数据库输入。如果有人输入 ',那么您的整个查询将再次中断,或者您的数据库被破坏。 【参考方案1】:因此,如果您的代码在 txtNewPassword 字段中有一个单引号,那么您的查询最终会是这样的
Query = "UPDATE Users SET Password ='mypass'word' WHERE LoginID='123'"
这当然是语法错误。
你可以尝试用一对单引号替换一个单引号
Query = "UPDATE Users SET [Password] ='" & Replace(txtNewPassword, "'", "''") & "' WHERE ....
但请记住,此代码对 SQL 注入是开放的。如果在 VB6 中这样做并不容易,您也应该使用参数化查询。此外,正如 HansUp 在其评论中指出的那样,您需要用方括号将保留字 Password
括起来
Why should I use Parameters instead of putting values into my SQL string
【讨论】:
总是用表名或别名作为前缀比用括号括起来要容易得多。前缀意味着这个词是明确的,所以你不必括号。此外,它还可以与其他数据库很好地配合使用,并确保您不会因查询中有两个同名字段而导致错误。以上是关于在 VB 和 Access 中更新查询问题的主要内容,如果未能解决你的问题,请参考以下文章