Visual studio 2010 在VB和Access中更新查询问题

Visual studio 2010 在VB和Access中更新查询问题,visual-studio-2010,vb6,ms-access-2007,Visual Studio 2010,Vb6,Ms Access 2007,我试图在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)

我试图在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)

执行更新查询时会抛出一个错误,即语法错误。

因此,如果您的代码在txtNewPassword字段中有一个引号,那么您的查询结果如下

Query = "UPDATE Users SET Password ='mypass'word' WHERE LoginID='123'"
这当然是一个语法错误

您可以尝试用一对单引号替换单引号

Query = "UPDATE Users SET [Password] ='" & Replace(txtNewPassword, "'", "''") & "' WHERE .... 
但请记住,这段代码对SQL注入是开放的。如果在VB6中执行参数化查询并不容易,那么也应该使用参数化查询。此外,正如HansUp在其评论中指出的,您需要用方括号括起保留字
Password


@MitchWheat抱歉,错过了,但错误也没有改变。您的txtNewPassword是否包含一个引号?顺便问一下,上面的代码似乎是VB6或VBA,但您已经标记了Visual Studio-2010。有点不对劲。好老@Jeyaprakash学习如何清理数据库输入。如果有人输入了一个,那么整个查询将再次中断,或者数据库被破坏。始终使用表名或别名作为前缀要比用括号括起保留字容易得多。前缀意味着这个词是明确的,所以你不必用括号括起来。此外,它还可以很好地与其他数据库配合使用,并确保不会因为查询中有两个同名字段而导致错误。