DSum 函数用于计算指定记录集(一个域)中的一组值的总和。可以在 Visual Basic、宏、查询表达式或计算控件中使用 DSum 函数。
例如,可以在查询的计算字段表达式中使用 DSum 函数来计算一段时期某个特定雇员的总销售额。也可以在计算控件中使用 DSum 函数来显示特定产品的动态销售总和。
DSum(expr, domain, [criteria])
DSum 函数具有以下参数:
参数 | 说明 |
---|---|
expr | 表达式,用于标识要对其值作总计的字段。可以是指向表或查询中字段的字符串表达式,也可以是以该字段中的数据进行计算的表达式。在 expr 中可以包括表中字段的名称、窗体上的控件、常量或函数。如果 expr 包含函数,那么它可以是内置的,也可以是用户定义的,但不能是另一个域聚合函数或 SQL 聚合函数。 |
domain | 字符串表达式,代表组成域的记录集。可以是表名称或不需要参数的查询的查询名称。 |
criteria | 可选的字符串表达式,用于限制 DSum 函数执行的数据范围。例如,criteria 通常等价于 SQL 表达式中的 WHERE 子句,只是不含 WHERE 关键字。如果忽略 criteria,DSum 函数将在整个域范围内计算 expr。任何包含在 criteria 中的字段必须同时也是 domain 中的字段,否则 Dsum 函数将返回 Null。 |
如果没有记录满足 criteria 参数或者域中不包含任何记录,DSum 函数将返回 Null。
无论是在宏或模块、查询表达式或者在计算控件中使用 DSum 函数,都必须谨慎构造 criteria 参数以确保能够正确地进行计算。
在查询的“条件”行、查询表达式的计算字段中或更新查询的“更新到”行中,均可以使用 DSum 函数指定条件。
注意 可以在总计查询的计算字段表达式中使用 DSum 或 Sum 函数。如果使用 DSum 函数,将在数据分组之前计算总计值。如果使用 Sum 函数,则在字段表达式中的值计算之前进行分组。
如果需要显示窗体或报表记录源以外的字段值的总和,可能需要使用 DSum 函数。例如,如果有一个窗体显示有关一种特定产品的信息。可以在计算控件中使用 DSum 函数来计算这种产品销售额的运行总和。
提示 如果要保持报表控件中的运行总和,当控件所基于的字段位于报表的记录源中时,可以使用控件的 RunningSum 属性,DSum 函数还可用来保持窗体上的运行总和。
注意 使用该函数时,对 domain 中的记录未保存的更改将不包括在内。如果要让 DSum 函数基于更改后的数据,必须先保存更改。方法是单击“记录”菜单上的“保存记录”,或者将焦点移动到另一个记录上,或使用 Update 方法。
下面的示例计算运往英国的订单的“Freight”字段的总计值。域为“Orders”表。criteria 参数将记录集的结果限制为“ShipCountry”等于 UK 的记录。
Dim curX As Currency
curX = DSum("[Freight]", "Orders", "[ShipCountry] = 'UK'")
下一个示例通过使用两个不同的条件来计算总计。注意单引号(')和数字符号(#)需要包括在字符串表达式中,使得字符串连接时,将原义字符串包含在单引号中,将日期包含在数字符号中。
Dim curX As Currency
curX = DSum("[Freight]", "Orders", _
"[ShipCountry] = 'UK' AND [ShippedDate] > #1-1-95#")
可以在更新查询的“更新到”行中使用域函数。例如,要跟踪“Products”表中产品的当前销售情况,可以将一个名为 SalesSoFar 的新字段添加到“Products”表,并执行一个更新查询来计算正确的值并更新记录。首先基于“Products”表创建一个新查询,单击“查询”菜单上的“更新查询”命令。将 SalesSoFar 字段添加到查询网格,并将以下内容输入到“更新到”行中:
DSum("[Quantity]*[UnitPrice]", "Order Details", "[ProductID] = " _
& [ProductID])
在执行查询时,Microsoft Access 将根据“Order Details”表中的信息计算每种产品的销售总量。每种产品的销售总和添加到“Products”表中。