2008年1月 9日
【Access】Dlookup関数
フォームに入力中のテーブルにない情報を参照したい場合がある。たとえば、重複データの確認とか、顧客の詳細情報とか。今回は、重複入力の確認をDlookup関数を用いる方法を紹介するが、このDlookup関数の動作が遅く、VBAの作業中、突然フリーズしたりする。なかなか問題のある関数だが、非常に有用だ。
DLookup 関数を使うと、基になるレコード ソースにないフィールドの値をフォームやレポートに表示することができます。たとえば、演算コントロールで DLookup 関数を使って、[商品] テーブルにある [商品名] フィールドを、[受注明細] テーブルを基にするフォームに表示することができます。
DLookup(抽出フィールド, テーブル/クエリ名, 条件)
'個人番号は、キーになっていて重複しない番号なので、チェックをいれる
KNumCheck = DLookup("個人番号", "謝金登録フォーム用債主マスタークエリー", "[個人番号] = '" & 個人番号.Value & "'")
If IsNull(KNumCheck) = False Then '同じ番号があった
KName = DLookup("氏名", "謝金登録フォーム用債主マスタークエリー", "[個人番号] = '" & 個人番号.Value & "'")
SenkouName = DLookup("所属名", "謝金登録フォーム用債主マスタークエリー", "[個人番号] = '" & 個人番号.Value & "'")
mes = "すでにこの個人番号は、下記の方が使用しています。" & vbCrLf & "氏名 " & KName & " 所属名 " & shozokuName
kotae = MsgBox(mes, vbCritical, "Error")
個人番号.SetFocus
Exit Sub
End If
Dlookup関数を使わなくても似たようなことが出来ます。
むかしのエントリーで紹介済み
Private Sub 個人番号_AfterUpdate()
Dim IDnum As String
Dim strSQL As String
Dim Rst As DAO.Recordset
IDnum = Me.個人番号'IDnumがテキストなので'(シングルクオテーション)で括る必要がある。strSQL = "select * from 債主マスター where 個人番号='" & IDnum & "'"
Set Rst = CurrentDb.OpenRecordset(strSQL)
If Rst.RecordCount > 0 Then
If IDnum = Rst!個人番号 Then
MsgBox "この番号は、既に入力済みですが、間違いないですか?" & vbCrLf & "氏名:" & Rst!氏名 & " 個人番号:" & Rst!個人番号 & " 入力:" & IDnum
End IfSet Rst = Nothing
Exit Sub
End IfRst.Close
Set Rst = NothingEnd Sub
- by editor
- at 13:08
編集長のおすすめの一冊!2010
comments