带通配符的查询表达式中的语法错误
Syntax error in query expression with wildcard
我在以下代码中遇到语法错误 3075。我正在尝试打开一个记录集,其中字段 [subject] 包含来自打开表单 (Edit_Shipment_frm!Text105) 的 [ID]。主题字段的布局如下:Information Request - 1715,其中 1715 是 [ID]。我知道我需要在标准中的 [ID] 之前使用通配符。我正在努力寻找一种访问可以接受的方法来做到这一点。有人有什么想法吗?我在下面没有看到任何缺失的运算符,所以它一定不喜欢我的语法。提前致谢!
Set rst1 = db.OpenRecordset("SELECT Subject, Contents FROM LinkedTable WHERE Subject = *" & [Forms]![Edit_Shipment_frm]![Text105])
你不能这样使用星号。正确的 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()
returns 一个从0开始的数组,所以Split(..., " - ")(1)
给出“-”之后的部分。
但是要进行一些错误检查(例如,如果“-”可以是 ID 之前字符串的一部分),您应该将提取放入一个单独的函数中,在其中检查 NULL,并使用数组的 UBound()
。
我在以下代码中遇到语法错误 3075。我正在尝试打开一个记录集,其中字段 [subject] 包含来自打开表单 (Edit_Shipment_frm!Text105) 的 [ID]。主题字段的布局如下:Information Request - 1715,其中 1715 是 [ID]。我知道我需要在标准中的 [ID] 之前使用通配符。我正在努力寻找一种访问可以接受的方法来做到这一点。有人有什么想法吗?我在下面没有看到任何缺失的运算符,所以它一定不喜欢我的语法。提前致谢!
Set rst1 = db.OpenRecordset("SELECT Subject, Contents FROM LinkedTable WHERE Subject = *" & [Forms]![Edit_Shipment_frm]![Text105])
你不能这样使用星号。正确的 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()
returns 一个从0开始的数组,所以Split(..., " - ")(1)
给出“-”之后的部分。
但是要进行一些错误检查(例如,如果“-”可以是 ID 之前字符串的一部分),您应该将提取放入一个单独的函数中,在其中检查 NULL,并使用数组的 UBound()
。