我正在开发一个Access数据库(使用Office 2016)并有几个选项卡控件,我想显示子窗体/子报表中的记录数。
经过大量的搜索等我使用我在主窗体当前事件中调用的函数为子窗体工作(但在单独的函数中,所以当我更改主窗体记录时我也可以通过宏调用一个组合框,因为它没有更新否则)。我正在使用的代码是:
Function ClientTotals()
Dim i As Integer
i = Form_sbfrm_ClientContacts.Recordset.RecordCount
Form_frm_Clients.ClientTabs.Pages("Contacts").Caption = "Contacts (" & i & ")"
End Function
这对我来说非常有效,我的标签名称变为"联系人(记录数)"但我无法正确使用语法将其更改为报告,是否可能?
我试过了:
Function ClientTotals()
Dim i As Integer
i = Form_sbfrm_ClientContacts.Recordset.RecordCount
Form_frm_Clients.ClientTabs.Pages("Contacts").Caption = "Contacts (" & i & ")"
Dim j As Integer
j = Report_rpt_CurrentProjects.Recordset.RecordCount ' this line is highlighted with the debugger
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")"
End Function
以及:
Dim j As Integer
j = rpt_CurrentProjects.Report.Recordset.RecordCount ' this line is highlighted with the debugger
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")"
和其他各种人。
我遇到的另一个问题是为什么表单的语法为" Form_sbfrm"等,而不是使用"!"。如果我改为"!"它漏掉了。
感谢您的帮助,KAL
答案 0 :(得分:2)
感谢Delecron,
我想我现在会坚持使用标签,因为他们正在给我我想要的东西,但要记住你在未来的改进中所说的话,如果它是一个更好的方法。
修改强>
使用你所说的我将我的VBA改为DCOUNT方法:
Dim j As Integer
j = DCount("*", "qry_CurrentProjects", "FK_Project_Client_ID = Forms!Navigation!Navigationsubform.form!Client_ID")
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")"
这意味着我的报告标签现在也正常工作
我对标准/过滤器感到困惑,继续编辑。
如果Recordset是一个旧方法,我假设最好用Dcount方法替换我的其他代码?
再次感谢,KAL
进一步编辑
执行此操作后,我可以看到每次更改表单时都会出现轻微的闪烁。不错,但你可以看到有很多计算正在进行中。因此,我已将我的方法更改为以下内容,并在此处发布,以供将来查看此内容的任何人使用。
在表单页脚中包含COUNT([Project_ID])
的文本框在我的功能中
Dim j As Integer
j = Form_frm_Clients!rpt_CurrentProjects.Report!txt_CurrentProjectsCount.Value
Form_frm_Clients.ClientTabs.Pages("Current Projects").Caption = "Current Projects (" & j & ")"
现在我可以看到它工作得更快,没有闪烁。
答案 1 :(得分:0)
Recordset.Recordcount是一项遗留功能,仅适用于ADP文件(Access前端到SQL数据库)。那些不再受支持。
如果报告仅基于1个客户端且没有分组,则可以执行此操作:
单击详细信息部分,然后在事件中为On Paint创建事件。在那里设置
(Name of Page).Caption = DCount("*", "NAME OF QUERY/TABLE") or
(Name of Page).Caption = DCount("*", "NAME OF QUERY/TABLE", "Filter Expression") (Filter expression optional).
如果报告被分组,它将在每个客户端或日期范围或任何其他分组显示不同的页面,这将不起作用,因为标题字段不是数据绑定。您必须通过当前过滤条件向上面的Dcount语句添加逻辑。
例如,假设您有一个包含200个客户端的数据库,并且您正在运行一个关于所有客户端的大型报告,每个页面将为每个客户端获得自己的选项卡控件,语法将为
(Name of Page).Caption = DCount("*", "ClientContacts, "ClientID = " & ClientID)
更好的方法,特别是如果你正在分组是摆脱选项卡控件并使用数据绑定控件。您可以围绕选项卡页面中的信息创建一个框,并将选项卡放在文本框中。创建组标题但是您要对数据进行分组。在组头中创建另一个不可见的文本框,并设置controlsource = Count([fieldname]),其中fieldname是您按数据分组的内容(内括号计数)。
然后在您创建的文本框中模拟选项卡,将controlsource设置为不可见文本框的名称。
如果有帮助,请告诉我。
答案 2 :(得分:0)
记录集如果需要返回复杂数据,如果需要一个值,一个总数或一个总和,域函数就可以了。但是,不要过期他们,在表格或报告上有太多可能会导致可用性陷入困境。
很高兴我能提供帮助。