【问题标题】:Access-VBA - Compile Error with ConcatRelated - Previously workedAccess-VBA - 使用 ConcatRelated 编译错误 - 以前工作过
【发布时间】:2018-12-04 07:03:22
【问题描述】:

我在尝试使用 Allen Browne 的 ConcatRelated 函数运行查询时收到编译错误。

编译错误:在查询表达式 'SELECT MbrNbr, EventIndex, ConcatRelated("EventIndex", "PlayerResults", MbrNbr = 123456)'中。

神秘的是我知道这之前成功执行了。

注意:这是我第一次在项目中使用MS Access,所以这是我第一次使用Allen的ConcatRelated函数。我不得不假设我缺少一些明显的东西。我用 MS Excel VBA 编码已经有 10 年了。

我确实有一个比下面的示例更复杂的查询,但我将这个非常基本的查询放在一起只是为了测试我的设置是否突然出现问题。

我已经尽我所能尝试解决这个问题,所有代码示例似乎都表明我的做法是正确的。

设置:

  • ConcatRelated 保存为名为 Concat_Related_Data 的函数。我读过函数名不能ConcatRelated

  • 收到错误的简单查询是:

    SELECT MbrNbr, EventIndex, ConcatRelated("EventIndex", "PlayerResults", MbrNbr = 123456) 
    FROM PlayerResults;
    

    注意:我复制了 Allen 的示例,并通过调用我的一张表简单地对其进行了编辑。字段MbrNbr 定义为“数字”。

任何见解都将不胜感激!

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    在这里查看http://allenbrowne.com/func-concat.html 之后,我看到第三个参数也被定义为字符串参数(如预期的那样)而不是布尔值。

    所以我认为你应该使用这个:

    SELECT MbrNbr, EventIndex, ConcatRelated("EventIndex", "PlayerResults", "MbrNbr = 123456") FROM PlayerResults;
    

    信息:ConcatRelated的第三个参数在这里也是一个字符串,包含你的条件。

    【讨论】:

    • 感谢未处理。我确实错过了这一点并进行了更改,但仍然收到该错误。从 PlayerResults 中选择 MbrNbr、EventIndex、ConcatRelated("EventIndex"、"PlayerResults"、"MbrNbr = 123456"); (smashing.my.head.on.a.brick.wall.BILL)
    • 我创建了一个新数据库,其中包含您描述的表和过程ConcatRelated(从 Allens 站点复制到一个新模块中)。您的查询在这里运行良好。奇怪的。您可以发布您使用的程序吗?你修改了吗?
    • 再问:在VBE中编译代码能不报错吗?
    • VBA 中的相同错误 这是实际的查询 SELECT MbrNbr, EventIndex, ConcatRelated("EventIndex", "PlayerResults", "MbrNbr = 123456") 仅供参考:我没有修改 Allen 的函数。直接复制粘贴
    • 仅供参考:我在“查询”和 VBA 模块中有上述内容。两者都给出编译错误。
    【解决方案2】:

    除了@UnhandledException 提供的答案;您在哪里声明:

    ConcatRelated 保存为名为@9​​87654322@ 的函数。
    我读过函数名不能ConcatRelated

    为了清楚起见:函数的代码应该从 Allen Browne 的站点“按原样”复制到新的 VBA 模块中,而不更改函数名称。

    但是,在保存 VBA 模块时,模块 的名称应与ConcatRelated 不同,否则在尝试调用该函数时会收到类型不匹配错误。


    请注意,如果您在 SQL 代码中使用由 VBA 中的字符串表示的代码,则需要转义双引号(以确保它们保留在 SQL 代码中),或使用单引号相反,即:

    CurrentDb.OpenRecordset("SELECT MbrNbr, EventIndex, ConcatRelated('EventIndex', 'PlayerResults', 'MbrNbr = 123456') FROM PlayerResults")
    

    或者:

    CurrentDb.OpenRecordset("SELECT MbrNbr, EventIndex, ConcatRelated('EventIndex', 'PlayerResults', 'MbrNbr = 123456') FROM PlayerResults")
    

    【讨论】:

    • 感谢李麦克。我已将该函数命名为“ConcatRelated”以外的名称。对不起,如果我在上面说清楚了。
    • @billgeo 重点是您不需要将 函数 命名为 ConcatRelated 以外的名称,而是将 VBA 模块 命名为除了ConcatRelated。该函数应保持原样命名,否则您还需要重命名所有返回调用。
    • 啊...我明白你的意思了。我的回答模棱两可 是的,函数是“ConcatRelated”,而模块是别的东西。
    • @billgeo 根据您的 cmets 中的信息,我已经更新了上面的答案。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多