【问题标题】:Update query issue in VB and Access在 VB 和 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 了解如何清理您的数据库输入。如果有人输入 ',那么您的整个查询将再次中断,或者您的数据库被破坏。

标签: visual-studio-2010 vb6 ms-access-2007


【解决方案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

【讨论】:

  • 总是用表名或别名作为前缀比用括号括起来要容易得多。前缀意味着这个词是明确的,所以你不必括号。此外,它还可以与其他数据库很好地配合使用,并确保您不会因查询中有两个同名字段而导致错误。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-04-12
  • 1970-01-01
  • 2012-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多