我正在精简我的数据库,尽可能消除重复的报告并创建更好的代码。我有一个涉及我们的焊工和工头的数据库。在这段代码中,我可以为单个工头打印一份报告,该报告通过 openargs 发送字符串“strActive”。报告查看 strActive 和 OpenForm 操作,根据字符串为活动、非活动或所有焊工设置过滤器通过的值。
它在时间码上完美地适用于单页。在那里,用户从列表中选择一个领班或输入领班的时钟号码。报告所基于的查询使用全局字符串“ForemanCLK”来仅获取该焊工的结果。
以前,我有三份报告;一份用于所有焊工,一份用于活跃焊工,一份用于非活跃焊工。
以前,我会根据 strActive 设置一个变量,并使用代码中的另一个变量代替报告名称打开相应的报告。循环运行良好并打开报告 39 次,每次都使用新的工头姓名和数据。
我很困惑为什么现在用 openarg 打开报告不起作用。我只得到第一个工头的名字,39次。我已经通过注释掉 docmd 行和 debug.print(ing) 表单所需的各种值来验证我得到了不同工头的 foremanCLK 变量。该报告根本无法正确加载。
Set rec = CurrentDb.OpenRecordset(sql)
rec.MoveFirst
For ctr = 0 To rec.RecordCount - 1
ForemanCLK = rec(0).Value
DoCmd.OpenReport "rptForeman", acViewNormal, , , , strActive
'DoCmd.OpenReport "rptForeman", acViewNormal
rec.MoveNext
Next
上面的代码让我得到了由 strActive 过滤的同一个工头报告的许多副本
For ctr = 0 To rec.RecordCount - 1
ForemanCLK = rec(0).Value
'DoCmd.OpenReport "rptForeman", acViewNormal, , , , strActive
DoCmd.OpenReport "rptForeman", acViewNormal
rec.MoveNext
但这让我得到了所有不同的工头,除了它没有被过滤。
我试过传入 Where 子句。
acViewNormal, ,"[active]=" & True
和
acViewNormal, ,"[active]=" & False
和
acViewNormal, ,"[active]=" & True & " OR [active]=" & False
我对单个报告进行了相同的验证,它正确过滤,但在循环中,它根本不过滤。但是,它确实给了我不同的工头。
这里最大的问题是......
为什么?access 在报告之间是否没有足够的时间来关闭它,因此它不会对打开的事件执行操作?
还有其他想法吗?