Microsoft Access Club >AccessTips >このページ >次頁 < 前項  サイト内検索


フォーム上のコントロールから文字列データを抽出する方法:AccessTips112



テーブルデータを、フォーム上のコントロール(テキストボックス等)に入力された条件を元に取得する場合、この条件となるデータ型が、数値、テキスト、時刻型それぞれによって、抽出条件の書き方が異なってきます。 その中でも一番誤りやすいのが、この文字列を扱う場合です。

Dlookup関数の使用

例えば、Dlookup関数を用いて、テーブルデータから抽出する場合を想定します。[社員ID]フィールドは数値型、[氏名]フィールドはテキスト型 (文字列)です。#テーブル名は、tbl_sampleとしてます。

社員ID 氏名
1234 Clubくん
4321 Accessくん
3667 Benくん

Dlookup関数で抽出条件(criteria)を指定しなかった場合、 先頭のデータが検索されます。

Dlookup("[社員ID]","tbl_sample") 

次に、抽出条件(引数 criteria)を 氏名 Accessくん とした場合、Dlookup関数の抽出条件をニ重引用符 (") で囲むと同時に、文字列式の中のテキスト抽出条件を、一重引用符 (') で囲む必要があります。このところは、よく間違うところですから十分な注意をして下さい。

Dlookup("[社員ID]","tbl_sample","[氏名] = 'Accessくん'") 

Accessくんは文字列ですから、数値型データのようにそのまま配置することはできません。万が一、一重引用符をつけなかった場合は、実行時に下記のエラーメッセージが表示されます。

次に、「デバッグ」をクリックすると、下記のように一行全体が黄色で警告されています。

Functionプロシージャ

これをFunctionプロシージャで表すと、下記のようになります。

Function BBB()

    BBB = DLookup("[社員ID]", "tbl_sample", "[氏名] = 'Accessくん'")
    Debug.Print 'イミディエイトウインドウに表示します。

End Function

該当データの抽出

では、今回のテーマである、フォーム上のテキストボックスに入力されたデータを抽出条件として、テーブルデータから該当データを抽出してみましょう。フォーム上にテキストボックス(名前は、txt社員IDとしています)を作成します。

更新後処理イベントプロシージャ

このテキストボックス txt氏名 の更新後処理イベントに、下記のようなプロシージャを記述します。

Private Sub txt氏名_AfterUpdate()

    Dim varmsg As Variant

    varmsg = DLookup("[社員ID]", "tbl_sample", "[氏名] = " & "'" & Me.txt氏名 & "'")
    
    If IsNull(varmsg) Then
        varmsg = "該当者なし"
    End If

    MsgBox varmsg

End Sub
解説

下記のような条件式を記述します。

  • DLookup("[社員ID]", "tbl_sample", "[氏名] = " & "'" & Me.txt氏名 & "'")

または、

  • DLookup("[社員ID]", "tbl_sample", "[氏名] = '" & Me.txt社員ID & "'")

この構文に使用している & は文字列を連結します。

  1. "[氏名] = " & "'" & Me.txt氏名 & "'" → OKです
  2. "[氏名] =  '" & Me.txt氏名 & "'" → OKです
  3. "[氏名] = Me.txt氏名"  → だめです
  4. "[氏名] = " & Me.txt氏名  → だめです
  5. "[氏名] = " & 'Me.txt氏名'  → だめです
留意点

Me.txt氏名に入力されたデータは文字列です。

文字列の場合は、一重引用符で囲む必要がありました。よって、Me.txt氏名を囲みます。しかし、Me.txt氏名オブジェクト名です。何が入力されるか分からない、いわば変数的なオブジェクトですから、これを一重、または二重引用符で囲んでしまうと、Me.txt氏名が文字列となってしまいます。

Me.txt氏名テキストボックスに入力された値が必要なのであって、Me.txt氏名テキストボックス自身は必要ではありません。この違いをよく覚えて置いてください。

二重引用符

一重引用符ではなく二重引用符だけで表わすことも可能です。この場合は、下記のようにして下さい。

DLookup("[社員ID]", "tbl_sample", "[氏名] = " & """" & Me.txt氏名 & """")

一重引用符の代わりに二重引用符を2個続けるのがポイントです。

関連ページ

2003/09/14

ページの先頭へ 前ページへ戻る

 


フォーム上のコントロールから文字列データを抽出する方法:AccessTips112


 

-Microsoft Access Club-