我昨天在SE和网络上寻找一种方法,将多个记录中的特定字段连接在一起,作为Access数据库中查询/报告结构的一部分。我发现this SE question让我看到了Allen Browne的ConcatRelated()函数 here。通过将模块命名为与功能相同的方式在错误的脚上下来后,我按照需要使其工作。
然而,在我最初尝试在查询中使用它时,我犯了一个愚蠢的错误,并将其等同于"WHERE Employee = " & [Employee]
而不是正确的'WHERE Employee = ' & [Employee] & "'"
的参数作为字符串进行评估。这导致了预期的3464(数据类型不匹配)运行时错误,但是在Allen的修改中,它显示了导致错误的实际字符串。毫不奇怪,我只需单击确定并修复SQL。我很惊讶地发现它没有用。一旦我点击了msgbox,它就会再次回来。我使用Ctrl+Break
来停止代码,但是单击End
会导致它返回到相同的错误,而不是实际结束函数。我可以阻止循环的唯一方法是点击Debug
,这会让我按预期将代码放入代码中,但我无法退出代码来更改原始查询。点击重置导致错误再次弹出并让我回到循环中。
我最终通过评论错误处理程序中的所有内容并将其告诉Exit Function
来摆脱它。我知道很可能只是掩盖了问题,所以我添加了一个计数器,并在每次调用错误处理程序时增加它,然后检查立即窗口中的值。果然,每次点击查询中的某个地方,它都会增加10或更多。
我不明白的是导致错误循环的原因。 Err_Handler
应该将其从第一个错误的函数中转储出来,因为它没有告诉它尝试Resume
并且它专门将它指向Exit_Handler
,这会重置一些变量和那么Exit Function
。即使直接将Exit Function
放入Err_Handler
仍然会导致我的错误计数器多次递增。进一步尝试Debug
会突出显示第Set rs = DBEngine(0)(0).OpenRecordset(strSql, dbOpenDynaset)
行。我不知道它有多大帮助,因为它是函数构造strSql
值后的第一行。评论它会导致下一行突出显示。
我知道为什么会导致初始错误(我的错误)并且这很容易解决。我对错误的意外结果及其产生的循环更感兴趣。
tl; dr
msgbox
的东西似乎无限循环,或者至少在我厌倦了点击之前。 我最初使用的是一张包含600多条记录的表,但后来又用一张只有10条记录的小表进行了实验。
小表查询SELECT TestEmpHistory.Employee, ConcatRelated("EmpGroup", "TestEmpHistory", "Employee = " & Employee) AS CompliedNames
FROM TestEmpHistory
以重现错误。
表格TestEmpHistory
采用以下格式:
ID(AUTONUM)|员工| EmpGroup |查询中未引用的其他字段
ID |员工| EmpGroup |
1 | Employee1 | G& A
2 |员工1 |销售
3 |员工2 | CSR
4 |员工2 | G& A
5 |员工3 | CSR
6 |员工3 |编程
7 |员工3 | G& A
8 |员工4 | CSR
9 |员工4 | CSR
10 | Employee4 |编程
我正在使用Access 2016
答案 0 :(得分:1)
在没有阅读整篇文章的情况下,我猜测你在循环中的原因是因为它为查询返回的每一行运行此代码。摆脱这种情况的唯一方法是,当您闯入代码时,暂时将其全部注释掉,以便查询可以完成而不会为每一行生成错误。完成此操作后,您可以在取消注释功能代码并再次尝试之前返回并更正查询设计。