在 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 中更新查询问题的主要内容,如果未能解决你的问题,请参考以下文章

更新查询在带有 MS Access 的 VB.NET 中不起作用

从 VB.NET 调用访问宏问题

vb中如何实现对access数据库的数据添加、修改、删除

VB连接ACCESS数据库,使用 LIKE 通配符问题

VB.Net/Access SQL 插入子查询问题

操作必须是可更新的查询 - VB Script, Paradox Table