DCount 函数

应用对象
Microsoft 365 专属 Access Access 2024 Access 2021 Access 2019 Access 2016

可以使用 DCount 函数来确定域) (指定一组记录中的记录数。 在Visual Basic for Applications (VBA) 模块、宏、查询表达式或计算控件中使用 DCount 函数。

例如,可以在模块中使用 DCount 函数返回订单表中与特定日期下的订单相对应的记录数。

语法

DCount (expr, domain* [, criteria] )

DCount 函数语法具有以下参数:

参数 说明
expr 必需。 标识要对记录进行计数的字段的表达式。 它可以是标识表或查询中字段的字符串表达式,也可以是对该字段中的数据执行计算的表达式。 在 expr 中,您可以包含表中的字段名称、窗体上的控件、常量或函数的名称。 如果 expr 包含一个函数,则它可以是内置的或用户定义的,但不能是另一个域聚合或 SQL 聚合函数。
域 必需。 标识构成域的记录集的字符串表达式。 它可以是表名称,也可以是不需要参数的查询的查询名称。
条件 可选。 用于限制对其执行 DCount 函数的数据范围的字符串表达式。 例如, criteria 通常等效于 SQL 表达式中的 WHERE 子句,而不包含单词 WHERE。 如果省略 条件 , DCount 函数将针对整个域计算 expr 。 条件中包含的任何字段也必须是域中的字段;否则,DCount 函数将返回 Null。

备注

如果不需要知道记录的特定值,请使用 DCount 函数计算域中的记录数。 尽管 expr 参数可以对字段执行计算,但 DCount 函数只是计算记录数。 expr 执行的任何计算的值均不可用。

如果需要指定条件来限制对其执行函数的数据范围,请在计算控件中使用 DCount 函数。 例如,若要显示要发往加利福尼亚的订单数量,请将文本框的 ControlSource 属性设置为以下表达式:

=DCount("[OrderID]", "Orders", "[ShipRegion] = 'CA'")

如果只想对 域 中的所有记录进行计数而不指定任何限制,请使用 Count 函数。

提示 Count 函数已经过优化,可加快查询中的记录计数速度。 在查询表达式中使用 Count 函数而不是 DCount 函数,并设置可选条件以对结果强制执行任何限制。 如果必须从代码模块或宏内或计算控件中对域中的记录进行计数,请使用 DCount 函数。

可以使用 DCount 函数来计算包含不在窗体或报表所基于的记录源中的特定字段的记录数。 例如,可以在基于 Products 表的窗体上的计算控件中显示 Orders 表中的订单数。

DCount 函数不计算 expr 引用的字段中包含 Null 值的记录,除非 expr 是星号 (*) 通配符。 如果使用星号, DCount 函数将计算记录的总数,包括包含 Null 字段的记录。 以下示例计算 Orders 表中的记录数。

intX = DCount("*", "Orders")

如果 域 是具有主键的表,您还可以通过将 expr 设置为主键字段来计算记录总数,因为主键字段中永远不会有 Null 。

如果 expr 标识多个字段,请使用串联运算符(与号 (&) 或加法运算符 (+) )分隔字段名称。 如果使用与号分隔字段,则 DCount 函数将返回包含下列任何字段中的数据的记录数。 如果使用加法运算符,则 DCount 函数将仅返回在列出的所有字段中包含数据的记录数。 下面的示例演示了每个运算符在用于一个字段(该字段包含 ShipName) 的所有 (记录中的数据)和一个不包含 ShipRegion) (数据的字段一起使用时的效果。

intW = DCount("[ShipName]", "Orders")
intX = DCount("[ShipRegion]", "Orders")
intY = DCount("[ShipName] + [ShipRegion]", "Orders")
intZ = DCount("[ShipName] & [ShipRegion]", "Orders")

注意

与号是执行字符串串联的首选运算符。 应避免将加法运算符用于除数字相加以外的任何操作,除非特别希望通过表达式传播 Null。

使用此函数时,不包括 对域 中记录的未保存更改。 如果希望 DCount 函数基于更改的值,必须先通过单击“数据”选项卡上“记录”下的“保存记录”、将焦点移动到另一条记录或使用“更新”方法保存更改。

查询示例

Expression 结果
SELECT DCount (“ProductID”,“ProductSales”,“Discount=0”) AS Expr1 FROM ProductSales GROUP BY DCount (“ProductID”,“ProductSales”,“Discount=0”) ; 返回表“ProductSales”的字段“ProductID”中其中“Discount”值为“0”的值的计数。
SELECT DCount (“ProductID”,“ProductSales”,“DateofSale=Date () -1”) AS YesterdaySale FROM ProductSales GROUP BY DCount (“ProductID”,“ProductSales”,“DateofSale=Date () -1”) ; 返回表“ProductSales”的字段“ProductID”中的值计数,其中“DateofSale”为当前日期的前一天。

VBA 示例

注意

下面的示例演示了在Visual Basic for Applications (VBA) 模块中使用此函数。 有关使用 VBA 的详细信息,请在“搜索”旁边的下拉列表中选择“开发人员参考”,然后在搜索框中输入一个或多个术语。

以下函数返回在指定发货日期之后发往指定国家/地区的订单数量。 域是 Orders 表。

Public Function OrdersCount _
    (ByVal strCountryRegion As String, _
    ByVal dteShipDate As Date) As Integer
    OrdersCount = DCount("[ShippedDate]", "Orders", _
        "[ShipCountryRegion] = '" & strCountryRegion & _
        "' AND [ShippedDate] > #" & dteShipDate & "#")
End Function

要调用该函数,请在“即时”窗口中使用以下代码行:

:OrdersCount "UK", #1/1/96#