带记录数的 MS Access 选项卡控件名称

MS Access Tab Control Name with Number of Records

我正在开发一个 Access 数据库(使用 Office 2016)并且有几个选项卡控件,我想在 subform/subreport 中显示记录数。

经过大量搜索等,我使用一个在主窗体当前事件中调用的函数来处理子窗体(但在一个单独的函数中,所以我也可以在更改主窗体时通过宏调用使用组合框记录,因为它不会以其他方式更新)。我使用的代码是:

Function ClientTotals()

Dim i As Integer
i = Form_sbfrm_ClientContacts.Recordset.RecordCount
Form_frm_Clients.ClientTabs.Pages("Contacts").Caption = "Contacts (" & i & ")"
End Function

这对我来说非常有用,我的选项卡名称变成了 "Contacts (No. of records)",但我无法获得正确的语法来更改它以用于报告,这可能吗?

我试过:

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

Recordset.Recordcount 是一项仅适用于 ADP 文件的旧功能(访问前端到 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)

更好的方法是摆脱选项卡控件并使用数据绑定控件,尤其是在分组时。您可以在选项卡页面中的信息周围创建一个框,并在选项卡所在的位置放置一个文本框。创建一个组 header 用于对数据进行分组。在组 header 中创建另一个不可见的文本框并设置 controlsource = Count([fieldname]) 其中 fieldname 是您对数据进行分组的任何内容(内部括号计数)。

然后在你创建的模拟标签的文本框中,将controlsource设置为不可见文本框的名称。

如果有帮助请告诉我。

谢谢 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 & ")"

这意味着我的报告选项卡现在也按照我想要的方式工作

我对 criteria/filter 感到困惑,所以编辑。

如果 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 & ")"

现在我可以看到它工作得更快,没有闪烁。

Recordset 如果你需要 return 复杂的数据,如果你需要一个值,一个总计或一个总和,域函数是最好的选择。不过不要逾期,表格或报告中的内容过多可能会开始降低可用性。

很高兴我能提供帮助。