【问题标题】: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()

    【讨论】:

      猜你喜欢
      • 2014-03-22
      • 1970-01-01
      • 1970-01-01
      • 2015-12-01
      • 1970-01-01
      • 2018-09-02
      • 2018-01-29
      • 2012-11-14
      相关资源
      最近更新 更多