Microsoft Access Club >SampleFile Q & A >インデックス >このページ >次頁 < 前項  サイト内検索


Q&A-002 Query内でFunction関数の使用例--番号の上二桁を認識させて



Access Club 超初心者 BBS
タイトル : 番号の上二桁を認識させて・・・
記事No : 6429
投稿日 : 2003/04/11(Fri) 14:29
投稿者 : とり

OS:NT4.0
Access Version:97
上二桁で種別を、下3桁が実際のナンバーとか、そういったものの入力なのですが、フォームで発注番号を5桁で入力したら自動的に種別が出るようにしたいのですが。。。
 


この投稿内容を実現するためには、テーブルに格納されているデータを「発注番号」が入力される都度、フォーム上に引っ張り上げる必要があります。

考え方

その方法として考えられるのは、

  1. DlookUp関数の利用
  2. クエリでデータを加工

の2通りが考えられるんじゃないでしょうか。

クエリでデータを加工

今回のサンプルは、前回001ファイルと異なり分類をテーブルに保存する仕様です。サンプルとして、テーブルを2種類作成します。これらのテーブルは独立しています。リレーション設定は不要です。

  1. tbl_sample  *最初の数字が全て30〜39までの数字。
ID 日付 識別番号 分類
1 2000/10/01 36263  
2 2000/10/10 32110  
3 2000/10/10 3222163  
4 2000/10/10 39334  
5 2000/10/10 37389  
6 2000/10/11 36229  
7 2000/10/11 352269  
  1. tbl_分類 *分類のマスターテーブルとして利用。
分類ID 分類名
30 チンパンジー
31 ゴリラ
32 チーター
33 アフリカゾウ
34 さい
35 きりん
36 バッファロー
37 とら
38 ライオン
39 うま

クエリの作成

下記のクエリデザインは、Function関数NumbersGetを新フィールドに配置したものです。

Function関数NumbersGetの作成

Function NumbersGet(Var識別 As Variant)

On Error GoTo エラー
    
    Var識別 = Left(Var識別, 2) '左2桁を抽出。
    
    If Not IsNull(Var識別) Then
        NumbersGet = DLookup("分類名", "tbl_分類", "[分類ID]=" & Var識別)
    Else
        NumbersGet = ""
    End If
        
Exit Function

エラー:

        MsgBox "予期せぬエラー発生" & vbNewLine & _
                Err.Number & vbNewLine & _
                Err.Description, 16
        End

End Function
解説

データベースウィンドウの「モジュール」から"新規作成"を選び、上記プロシージャを記述して下さい。このプロシージャは、クエリで使用することを前提にしているため、引数 Var識別 As variant を配置しています。このように変動する値を引数に配置することで、クエリ内の全レコードに影響を与え続けることが可能になります。

留意点

注意点は、識別コードを入力した後、空欄となっているのか、いないのかによつて、IsNull関数を用いて処理を変えている点です。

    If Not IsNull(Var識別) Then
        NumbersGet = DLookup("分類名", "tbl_分類", "[分類ID]=" & Var識別)
    Else
        NumbersGet = ""
    End If

これでクエリを使用したフォーム表示が完了です。試しに、このクエリを単独で実行すると、下記のようなデータシートが表示されます。

ID 日付 識別番号 分類 分類式
1 2000/10/01 36263   バッファロー
2 2000/10/10 32110   チーター
3 2000/10/10 3222163   チーター
4 2000/10/10 39334   うま
5 2000/10/10 991263    
6 2000/10/11      
7 2000/10/11 352269   きりん

隠しテキストボックスの利用

テーブルフィールド(分類)に分類データを格納させる方法として、隠しテキストボックスを利用します。

  1. フォーム上に1個のテキストボックスを新規作成します。
  2. 名前を TextBox隠しテキストボックス とします。
  3. テキストボックスのプロパティにある「可視プロパティ」を"いいえ"に変更します。
  4. コントロールソースに"分類"を選択します。
  5. フォームの「移動時イベント」に下記プロシージャを記述します。

レコード移動時イベントプロシージャの作成

Private Sub Form_Current()

    Dim TxtBoxA As TextBox
    Dim TxtboxB As TextBox
    
    Set TxtBoxA = txt分類 'クエリからデータが来ます。
    Set TxtboxB = txt隠しTextBox
    
    TxtboxB = TxtBoxA

End Sub
解説
  1. フォーム画面が切り替わる(他のレコードに移動やフォームを閉じる)毎にデータが保管されます。

2003/04/13

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

 


Q&A-002 Query内でFunction関数の使用例--番号の上二桁を認識させて


 

-Microsoft Access Club-