【问题标题】:Syntax error in query expression with wildcard使用通配符的查询表达式中的语法错误
【发布时间】:2015-11-02 21:21:14
【问题描述】:
我在以下代码中收到语法错误 3075。我正在尝试打开一个记录集,其中字段 [主题] 包含来自打开表单 (Edit_Shipment_frm!Text105) 的 [ID]。主题字段的布局如下:信息请求 - 1715,其中 1715 是 [ID]。我知道我需要在条件中的 [ID] 之前使用通配符。我正在努力寻找一种访问将接受的方法。有没有人有任何想法?我在下面看不到任何缺少的运算符,所以它一定不喜欢我的语法。提前谢谢!
Set rst1 = db.OpenRecordset("SELECT Subject, Contents FROM LinkedTable WHERE Subject = *" & [Forms]![Edit_Shipment_frm]![Text105])
【问题讨论】:
标签:
sql
vba
ms-access
operators
【解决方案1】:
你不能像这样使用星号。正确的 SQL 应该是
... WHERE Textfield LIKE '*" & [string that contains a part of Textfield] & "*'"
但你有相反的方式(你的 ID 是搜索字符串的一部分)。
您需要从表单字段中提取 ID。如果[Text105](请给这个字段起一个有意义的名字!)总是看起来像“some string - ID”,你可以使用Split()函数:
S = "SELECT Subject, Contents FROM LinkedTable WHERE Subject = " & _
Split([Forms]![Edit_Shipment_frm]![Text105], " - ")(1)
Set rst1 = db.OpenRecordset(S)
Split() 返回一个从 0 开始的数组,因此Split(..., " - ")(1) 给出了“ - ”之后的部分。
但是要进行一些错误检查(例如,如果“ - ”可以是 ID 之前的字符串的一部分),您应该将提取放入一个单独的函数中,在其中检查 NULL,并使用数组的 UBound()。