フォームでのデータ入力時に、すでにそのデータが入力されているかどうか
をチェックします。
● 準備 ●
・テーブル
【住所録テーブル】
----------------------------------------------------------
フィールド名 データ型 サイズ (AC97の場合)
----------------------------------------------------------
ID オートナンバー
氏名 テキスト型 20文字 40バイト
会社名 テキスト型 40文字 80バイト
郵便番号 テキスト型 8文字 8バイト
住所 テキスト型 100文字 200バイト
電話番号 テキスト型 13文字 13バイト
----------------------------------------------------------
・フォーム
【住所録入力フォーム】
住所録テーブルをレコードソースとした連結フォーム。
● サンプル ●
今回は[氏名][会社名][電話番号]の3つのフィールドが全て同一の場合に、重
複データであると判断します。同姓同名、同じ会社、家族(同じ電話番号)を
許可するためです。
電話番号のBeforUpdate/更新前処理イベントにコードを記述します。
Private Sub 電話番号_BeforUpdate(Cancel As Integer)
Dim strName As String '氏名
Dim strCompany As String '会社名
Dim strTelNo As String '電話番号
Dim strSQL As String 'SQL文
Dim Rst As DAO.Recordset 'レコードセット
'フォームに入力された項目を取得
strName = Me.氏名
strCompany = Me.会社名
strTelNo = Me.電話番号
'SQL文の発行
strSQL = "Select * From 住所録テーブル " & _
"Where 氏名 = '" & strName & "'" & _
" And 会社名 = '" & strCompany & "'" & _
" And 電話番号 = '" & strTelNo & "'"
'レコードセットを取得
Set Rst = CurrentDb.OpenRecordset(strSQL)
'重複チェック
If Rst.RecordCount > 0 Then
'重複があった場合は、メッセージを出し更新を中止する
MsgBox "既に入力されているデータです!!"
Set Rst = Nothing
Cancel = True
Exit Sub
End If
'終了処理
Rst.Close
Set Rst = Nothing
End Sub
● 詳細 ●
サンプルプロシージャではVBAによって作成した選択クエリを元にしたレコー
ドセットを作成し、そのレコード数を判断することによって重複データの有無を
チェックしています。
VBA中でのSQL文の作成方法、特に変数を文字列の中に組み込む方法に注意し
て下さい。
また、重複データが見つかった場合は、CancelパラメータにTrueを代入して
レコードの更新を中止しています。これも良く使う手法です。
ただし、その後にプロシージャを抜けるためのExit Subステートメントを書
くことを忘れないようにして下さい。そうしないと、その後の部分に書かれて
いる処理も実行されてしまいます。
● 補足説明 ●
Access2000の場合、デフォルトではDAOに参照設定されていません。
Visual Basic Editor(VBE)を開き、メニューの[ツール]−[参照設定]から、
Microsoft DAO 3.6 Object Libraryにチェックを入れて下さい。
その際にMicrosoft ActiveX Data Object 2.1 Libraryよりも上に、DAOの
チェックを持ってきて下さい。
|