即効テクニック |
●概要● フォームでのデータ入力時に、すでにそのデータが入力されているかどうかをチェックします。 ●手順● ・テーブル 【住所録テーブル】 ---------------------------------------------------------- フィールド名 データ型 サイズ (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のチェックを持ってきて下さい。