DCount 函數
套用到
你可以使用 DCount 函數來判斷指定紀錄集合中 (網域) 的紀錄數量。 在 Visual Basic for Applications 中使用 DCount 函式 (VBA) 模組、巨集、查詢表達式或計算控制項。
例如,您可以在模組中使用 DCount 函數,傳回 [訂單] 資料表中對應到某一特定日期的訂單記錄。
語法
DCount (expr, domain* [, criteria] )
DCount 函數語法具有下列引數:
| 引數 | 描述 |
|---|---|
| expr | 必要。 可識別您要計算記錄之欄位的運算式。 它可以是用來識別資料表或查詢欄位的字串表達式,也可以是對該欄位資料進行計算的表達式。 在 expr 中,你可以包含欄位名稱、表單上的控制項、常數或函式。 如果 expr 包含函式,可以是內建或使用者定義的,但不能是其他網域聚合或 SQL 聚合函式。 |
| domain | 必要。 識別構成範圍之記錄集的字串運算式。 它可以是資料表名稱,或不需要參數之查詢的查詢名稱。 |
| criteria | 可省略。 用來限制執行 DCount 函數的資料範圍的字串運算式。 例如, criteria 通常等同於 SQL 表達式中的 WHERE 子句,但沒有 WHERE 這個詞。 若遺漏 條件 , DCount 函數會對整個定義域評估 expr 。 任何包含在 條件 中的欄位也必須是 領域中的欄位;否則 DCount 函式會回傳 Null。 |
註解
當您不需要知道其特定值時,請使用 DCount 函數來計算網域中的記錄數目。 雖然 expr 參數可以對欄位進行計算,但 DCount 函數只是計算記錄的數量。 任何透過 expr 計算的值都無法取得。
當您需要指定準則以限制執行函數的資料範圍時,請使用計算控制項中的 DCount 函數。 例如,要顯示將出貨到加州的訂單數量,請將文字框的 ControlSource 屬性設為以下表達式:
=DCount("[OrderID]", "Orders", "[ShipRegion] = 'CA'")
如果你只是想在不指定任何限制的情況下計算 領域 內的所有紀錄,可以使用 Count 函式。
提示 計數功能已優化以加快查詢記錄的計數速度。 在查詢運算式中請使用 Count 函數 (而非 DCount 函數),並設定選擇性的準則對結果強制執行任何限制。 當您必須從程式碼模組或巨集或計算控制項中計算網域中的記錄時,請使用 DCount 函數。
您可以使用 DCount 函數來計算某個欄位出現在記錄中的次數 (即使該欄位不在您表單或報表所依據的資料來源中)。 例如,您可以在一個以 [產品] 資料表為基礎的表單上,透過計算控制項顯示 [訂單] 資料表中的訂單數量。
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 函式基於變更的值,必須先透過在資料標籤中的「記錄」下點選「儲存記錄」來儲存變更,將焦點移到另一筆紀錄,或使用更新方法來儲存變更。
查詢範例
| 運算式 | 結果 |
|---|---|
| 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 的詳細資訊,請在 [搜尋] 旁的下拉式清單中選取 [開發人員參考],並在 [搜尋] 方塊中輸入一個或多個字詞。
下列函數會傳回在指定的運送日期之後運送到指定國家/地區的訂單數目。 範圍是 [訂單] 資料表。
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#