Access デスクトップ データベースでは、 DLookup 関数を使用して、指定したレコード セット (ドメイン) から特定のフィールドの値を取得できます。
DLookup は、Visual Basic for Applications (VBA) モジュール、マクロ、クエリ式、またはフォームやレポートの計算コントロールで使用できます。
DLookup 関数を使用すると、フォームまたはレポートのレコード ソースにないフィールドの値を表示できます。 たとえば、"注文の詳細" テーブルに基づくフォームがあるとします。 フォームには、[ OrderID]、[ ProductID]、[ UnitPrice]、[ Quantity]、および [ Discount ] フィールドが表示されます。 ただし、 ProductName フィールドは別のテーブルである Products テーブルにあります。 演算コントロールで DLookup 関数を使用すると、同じフォームに ProductName を表示できます。
構文
DLookup(expr, domain [, criteria])
DLookup 関数には、次の引数があります。
| 引数 | 説明 |
|---|---|
expr |
必須。 値を返すフィールドを識別する式。 テーブルまたはクエリ内のフィールドを識別する文字列式、またはそのフィールド内のデータに対して計算を実行する式を指定することができます。
expr では、テーブル内のフィールド名、フォーム上のコントロール、定数、または関数の名前を含めることができます。
expr関数が含まれている場合は、組み込み関数またはユーザー定義関数を使用できますが、別のドメイン集計または集計関数SQLできません。 |
domain |
必ず指定します。 ドメインを構成するレコード セットを識別する文字列式。 テーブル名またはパラメーターを必要としないクエリのクエリ名を指定できます。 |
criteria |
省略可能です。
DLookup 関数が実行されるデータの範囲を制限するために使用される文字列式。 たとえば、criteria は、WHEREという単語を含まない、SQL式の WHERE 句に相当することがよくあります。
criteriaを省略すると、DLookup 関数はドメイン全体に対してexprを評価します。
criteria に含まれるフィールドは、domain のフィールドでなければなりません。 それ以外の場合、 DLookup 関数は Null を返します。 |
解説
DLookup 関数は、criteria で指定された情報に基づいて 1 つのフィールド値を返します。
criteria は省略可能ですが、値を指定しないと、DLookup 関数はドメイン内のランダムな値を返します。
criteriaを満たすレコードがない場合、またはdomainにレコードが含まれていない場合、DLookup 関数は Null を返します。
複数のフィールドが criteria を満たす場合、 DLookup 関数は最初の出現を返します。
DLookupによって返されるフィールド値が確実に一意である条件を指定する必要があります。
DLookupが一意の値を返すように、次の例の [EmployeeID] など、抽出条件に主キー値を使用することがよいでしょう。
Dim varX As Variant
varX = DLookup("[LastName]", "Employees", _
"[EmployeeID] = 1")
DLookup 関数をマクロやモジュール、クエリ式、または演算コントロールのいずれで使用する場合でも、criteria 引数を慎重に構成して、Access が正しく評価されるようにしてください。
DLookup 関数を使うと、クエリの [抽出条件] 行、クエリの集計フィールド式、または更新クエリの [更新先] 行で抽出条件を指定できます。
表示する必要があるフィールドがフォームまたはレポートの基になるレコード ソースにない場合は、フォームまたはレポートの演算コントロールの式で DLookup 関数を使用することもできます。 たとえば、[ProductID] フィールドを表示する ProductID というテキスト ボックスがある [受注明細] テーブルに基づく [受注明細] フォームがあるとします。 テキスト ボックスの値に基づいてProductsテーブルからProductNameを検索するには、別のテキスト ボックスを作成し、その ControlSource プロパティを次の式に設定します。
=DLookup("[ProductName]", "Products", "[ProductID] =" & Forms![Order Details]!ProductID)
ヒント
- DLookup 関数を使用して外部テーブルのフィールドの値を表示できますが、両方のテーブルから必要なフィールドを含むクエリを作成し、そのクエリに基づいてフォームまたはレポートを作成する方が効率的な場合があります。
- また、ルックアップ ウィザードを使って、外部テーブルの値を検索することもできます。
注
この関数を使用する場合、 domain のレコードに対する未保存の変更は含まれません。 変更した値を使用するDLookupには、まず [データ] タブの [レコード] の [レコード] をクリックし、フォーカスを別のレコードに移動するか、Update メソッドを使用して変更を保存します。
使用例
注
次の例は、Visual Basic for Applications (VBA) モジュールでのこの関数の使用方法を示しています。 VBA の操作の詳細については、「 Access VBA リファレンス」を参照してください。
次の例では、criteriaを満たすレコードの CompanyName フィールドから名前の情報を返します。 ドメインは Shippers テーブルです。
criteria 引数は、結果のレコード セットを、ShipperIDが 1 に等しいレコード セットに制限します。
Dim varX As Variant
varX = DLookup("[CompanyName]", _
"Shippers", "[ShipperID] = 1")
Shippers テーブルの次の例では、フォーム コントロール ShipperIDを使用して、DLookup 関数に条件を指定します。 コントロールへの参照は、文字列を示す引用符で囲まれていません。 これにより、 DLookup を実行するたびに、コントロールから現在の値が取得されます。
Dim varX As Variant
varX = DLookup("[CompanyName]", "Shippers", _
"[ShipperID] = " & Forms!Shippers!ShipperID)
次の例では、変数 intSearch を使用して値を取得します。
Dim intSearch As Integer
Dim varX As Variant
intSearch = 1
varX = DLookup("[CompanyName]", "Shippers", _
"[ShipperID] = " & intSearch)