访问:在字段上筛选表单 - 当字段包含撇号时失败

Access: Filtering form on field - fails when fields contains an apostrophe

提问人:HelenC 提问时间:1/23/2023 更新时间:1/23/2023 访问量:38

问:

我在连续表单上有一个过滤器,它使用组合框来选择要匹配的记录;代码是:

Private Sub SelectHospitalCbo_AfterUpdate()

   Me.Filter = "[ContactHospital] = " & "'" & Me.SelectHospitalCbo & "'"
   Me.FilterOn = True
   
End Sub

这一直很好,直到我发现如果 ContactHospital 字段包含撇号(例如 Children's Hospital),我会收到一条错误消息:

运行时错误“3075”: 查询表达式“[ContactHospital] = 'Children's Hospital”中的语法错误(缺少运算符)。

我了解发生错误的原因,但我找不到解决方法。这个论坛上最近的一个问题似乎与我的问题类似,但没有答案。这是否意味着我无法绕过它?

如果有人想建议删除医院名称中的所有撇号,我会考虑,但不幸的是,这个数据库与一个(更大的)数据库交互,其中医院名称无法更改并且必须匹配,所以这对我来说不是一个选择。

来自更多经验的任何帮助 Access 开发人员表示赞赏!

ms-access 运行时错误 撇号

评论

1赞 mazoula 1/23/2023
以防万一,您可以完全避免此问题,并且遵循自定义可能是更好的做法。Comboboxe 的自定义有 2 列。ID 和说明。ID 是绑定列,由于设置为 0 宽度,因此不可见。然后将所有实例替换为标题中的 SelectHospitalcbo,将详细信息部分中的 ContactHospital 替换为 2 列组合框。当您需要报告的字符串值等时,只需替换当时的 id。
0赞 HelenC 1/23/2023
我以前使用过这种方法,但它引起了其他问题!如果我不能克服这个问题,我可能不得不重新考虑。谢谢。

答:

0赞 June7 1/23/2023 #1

选项:

  1. 按数字医院 ID 而不是其名称进行筛选

  2. "[ContactHospital] = '" & Replace(Me.SelectHospitalCbo, "'", "''") & "'"

  3. "[ContactHospital] = """ & Me.SelectHospitalCbo & """"

  4. "[ContactHospital] = " & Chr(34) & Me.SelectHospitalCbo & Chr(34)

评论

0赞 mazoula 1/23/2023
回答提出的问题。如果您正在寻找 quik-fix,那么您可以通过调用 Replace 然后正确分隔 ' 来处理此特定问题。例如,换行“[Contact...with: Public Function DelimitApostrophes(stringwithapostrophe As String) As String DelimitApostrophes = Replace(stringwithapostrophe, “'”, “'”) End Function End Function 或者只是用替换部分换行。
0赞 mazoula 1/23/2023
是的,这确实是“'”与“,但在上下文中,这意味着用引号撇号(” ' “)替换任何撇号(')。请参阅替换
0赞 June7 1/23/2023
@mazoula,您的评论中的代码显示将撇号替换为撇号 - 没有变化。
0赞 HelenC 1/24/2023
@june7,非常感谢您的回复,选项 2 是有效的!