带通配符的查询表达式中的语法错误

时间:2015-11-02 21:21:15

标签: sql vba ms-access operators

我在以下代码中收到语法错误3075。我正在尝试打开一个记录集,其中字段[subject]包含来自打开表单的[ID](Edit_Shipment_frm!Text105)。主题字段的布局如下:信息请求 - 1715,其中1715是[ID]。我知道我需要在条件中使用[ID]之前的通配符。我正在努力找到一种方法来实现访问将接受的方法。有没有人有任何想法?我在下面看不到任何遗漏的操作符,所以它一定不喜欢我的语法。提前谢谢!

Set rst1 = db.OpenRecordset("SELECT Subject, Contents FROM LinkedTable WHERE Subject = *" & [Forms]![Edit_Shipment_frm]![Text105])

1 个答案:

答案 0 :(得分:0)

你不能像这样使用星号。正确的SQL将是

... WHERE Textfield LIKE '*" & [string that contains a part of Textfield] & "*'"

但你反过来(你的ID是搜索字符串的一部分)。

您需要从表单字段中提取ID。如果[Text105](请给这个字段一个有意义的名字!)总是看起来像“某个字符串 - 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()