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


フォーム上のコントロールから日付/時刻データを抽出する方法:AccessTips113



数値型、テキスト型(文字列型)と続き、最後は 日付/時刻型 を取り上げます。テーブルデータを、フォーム上のコントロール(テキストボックス等)に入力された条件を元に取得する場合で、日付/時刻型のデータ型であれば # で囲む必要があります。

テキストボックスに 2003/01/01と入力されたからといって直ちに、これは日付/時刻型データであると決め付ける訳は行きません。初心者の方がよく間違われるのはこの点です。

データ型の決定

では、何をもってフォーム上のテキストボックスへ入力された値のデータ型を決めればいいのでしょうか?

  1. テキストボックスがテーブルと連結した 連結テキストボックス であれば、その連結したテーブルフィールド型と同じに考えて差し支えありません。
  2. 非連結テキストボックスであれば、そのデータを用いる状況に応じて変換するのが普通です。例えば、サンプルのようにDlookup関数の抽出条件として活用するつもりなら、その抽出条件、具体的に言いますと、テーブルフィールドA = テキストボックス入力値 の図式であれば、テーブルフィールドAのデータ型と同じものとして扱います。

Dlookup関数の使用

例えば、Dlookup関数を用いて、テーブルデータから抽出する場合を想定します。新規テーブルを作成します。テーブル名は、tbl_sampleです。入社日フィールドは時刻/日付型、氏名]フィールドはテキスト型 (文字列)です。

入社日 氏名
2000/04/01 Clubくん
2001/04/01 Accessくん
2002/04/01 Benくん

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

Dlookup("[氏名]","tbl_sample") 

逆に、抽出条件(引数 criteria)を 入社日 2001/04/01 とした場合、Dlookup関数の抽出条件を # で囲む必要があります。この辺は、よく間違うところですから十分に注意をして下さい。

Dlookup("[氏名]","tbl_sample","[入社日] = #2000/04/01#") 

と、なります。

#(シャープ)で囲まなかった場合は、どのようになるのでしょう?エラーメッセージは表示されません。何故なら、Dlookup("[氏名]","tbl_sample","[入社日] = 2000/04/01") は、文法的には正しいからです。エラーメッセージが表示されれば、「しまった。#が必要なんだ」と分かるものですが、それがないだけ始末に困ります。

なお、文法的に間違っている場合は、実行時に下記のエラーメッセージが表示されます。

Functionプロシージャ

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

Function CCC()

    CCC = DLookup("[氏名]", "tbl_sample", "[入社日] = #2000/04/01#")
    Debug.Print 'イミディエイトウインドウに表示します。

End Function

該当データの抽出

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

更新後処理イベント

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

Private Sub txt入社日_AfterUpdate()

    Dim varmsg As Variant

    varmsg = DLookup("[氏名]", "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氏名'  → だめです

2003/09/16

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


フォーム上のコントロールから日付/時刻データを抽出する方法:AccessTips113


 

-Microsoft Access Club-