【问题标题】:Access 2010 SQL Search within a SubForm - Problems with apostrophe in the search stringAccess 2010 SQL Search within a SubForm - 搜索字符串中的撇号问题
【发布时间】:2017-09-26 23:13:36
【问题描述】:

我在子表单中的 SQL 搜索字符串中遇到撇号问题。以“O'Mally 的苹果”为例。以下是我当前的 VBA 代码的一部分,它给我带来了问题。

MySearch = Replace(Me.TextSearch, "'", "''")
MySearch = "*" & MySearch & "*"
LineOne = "SELECT xxxxxxxxxx & vbNewLine  
LineTwo = "From xxxxxxxxx & vbNewLine  
   The following line is where my problem is.
LineThree = "WHERE ((([GLItems].Item) Like '" & MySearch & "'))" & vbNewLine  
LineFour = "ORDER BY xxxxxxx;"
MyCriteria = LineOne & LineTwo & LineThree & LineFour
stDocName = "[GLItemsSubform]"
Me![GLItemsSubform].Form.RecordSource = MyCriteria

如果我搜索“O'Mally's”,则查询返回(空白) 如果我搜索“mally”,它会返回 O'Mally's Apples

我不能只删除数据库中的所有撇号,双撇号在这种情况下不起作用

我已经到了极限。

请帮忙...

【问题讨论】:

  • 我假设您已经尝试搜索 'O''Mally''s' (注意它们每次都是两个单引号,而不是双引号。(我不使用访问,但这是标准SQL 会处理它)- 你可能还需要一个 % 最后来捕获 Apples 位。
  • 我认为您需要将这一行 MySearch = "*" & MySearch & "*" 从 * 替换为 %: MySearch = "%" & MySearch & "%"。查看这篇文章:Using the Right Wildcard characters
  • How to debug dynamic SQL in VBA -- 如果这没有直接帮助,请将Debug.Print MyCriteria 的输出添加到您的问题中。
  • 我将这一行更改为 MySearch = "%" & MySearch & "%" ,令我惊讶的是,它像宣传的那样工作。非常感谢,我一直在把头发拉出来。我正在研究旧的 Visual Basic 书籍以及在线挖掘,我找不到任何像你建议的东西。你教了一只很老的狗一个新把戏。现在我要阅读你提到的那些文章。再次感谢

标签: sql ms-access search vba


【解决方案1】:

我在使用 Access 2019 时遇到了同样的问题,可以通过 Tri&Error 解决。

以下语法导致 Access 运行时错误“3075”(搜索词中的语法错误):

…
Set BT = db.OpenRecordset("SELECT DISTINCT  …
SearchLine = Firstline(BT![FullAddress])
' FullAddress can comprise words such as " Queen's "
…
Set CT = db.OpenRecordset(" … WHERE [MyField] = '" & SearchLine & "' …
…

因此我将撇号改为引号:

…
Set BT = db.OpenRecordset("SELECT DISTINCT  …
SearchLine = Firstline(BT![FullAddress])
' FullAddress can comprise words such as " Queen's "
…
… Set CT = db.OpenRecordset(" … WHERE [MyField] = """ & SearchLine & """
…

这很好用。

但是,如果有人能告诉我一个更普遍有用的语法,我将不胜感激,当 FullAddress 包含以下表达式时,它也可以工作:Ivan IV Vasilyevich “可怕”的 1530-84 路!

【讨论】:

    【解决方案2】:

    我很惊讶它完成了任何事情 - 缺少引号。这是帖子中的拼写错误吗?

    LineOne = "SELECT xxxxxxxxxx " & vbCrLf
    LineTwo = "FROM xxxxxxxxx " & vbCrLf
    LineThree = "WHERE GLItems.Item Like '" & MySearch & "' " & vbCrLf
    LineFour = "ORDER BY xxxxxxxxx;"
    

    为什么要打扰 vbCrLf?为什么在发布的问题中使用 xxxxxxxxx?

    测试了双撇号并为我工作。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-06-25
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-25
      • 1970-01-01
      • 2021-03-22
      • 2013-04-08
      相关资源
      最近更新 更多