Accessで主キーが重複している場合にメッセージを表示する|AccessでME機器管理システム03

Primary-key-duplicate

MicrosoftAccessを使う上でとても重要な考え方に主キーというものの考え方があります。
主キーはテーブル内データを識別する上で固有の文字列となっている必要があります。
データを新規追加する時に、もしも主キーに重複がある場合、Accessがエラーを出します。

Accessの事を良く分かっている人だけが作成したシステムを使うのであれば問題ないのですが、実際はパソコンの事を良く分かっていない人も、Accessで作ったシステムに触れることがあります。

パソコンが苦手な人がAccessで作ったシステムを使っていて、エラーが出ると焦っていしまいます。

そうならないように、フォーム上で主キーの重複チェックを行い、ユーザーに通知してくれる仕組みを作っていきます。

目次

AccessVBAのIF構文で主キーの重複を調べる

機器情報テーブルをデザインビューで開いて、「保存」ボタンを右クリックしてプロパティシートを開きます。
「クリック時」のイベントプロシージャを開きます。

すでに「保存」ボタンにはフォームの内容を保存するVBAが記述されています。

ここに主キーの重複を調べるためのIF構文を追加します。

IF構文っていうのはこういう感じのヤツです。

If 条件 then
条件がある場合の命令
Else
条件に合わない場合の命令
End If

実際に入力するコードはコレです

If Not IsNull(DLookup("資産番号", "T-機器情報テーブル", "資産番号='" & Me!資産番号 & "'")) Then
Beep
MsgBox "入力された資産番号「" & Me!資産番号 & "」はすでに登録されています", vbOKOnly + vbExclamation, "主キー重複チェック"
cancell = True
DoCmd.GoToControl "資産番号"
Exit Sub
Else
DoCmd.SetWarnings False
DoCmd.OpenQuery "追加-機器情報テーブル"
DoCmd.SetWarnings True
Me!機器番号 = Null
Me!資産番号 = Null
Me!機器分類 = Null
Me!品名 = Null
Me!型番 = Null
Me!メーカー = Null
Me!備考 = Null
DoCmd.GoToControl "機器番号"
End If

こんな感じです。上のコードをプロシージャ内にコピペすればOKですよ。

「機器情報入力フォーム」をフォームビューに切り替えて、同じ主キー(資産番号)が入力された場合にちゃんと動作するかどうかの確認します。

ちゃんと主キー重複チェックが動作していますね。

AccessVBAでテキストボックスが空欄の場合に通知を出す

こんどは、資産番号テキストボックスが空欄だった場合に、テーブルにデータが飛ばない内容に工夫していきます。

このコードを「保存」ボタンクリック時のプロシージャに追加すればOKです。

If IsNull(Me!資産番号) = True Then
    Beep
    MsgBox "資産番号が未入力です", vbOKOnly + vbExclamation, "主キー入力チェック"
    Cancel = True
    DoCmd.GoToControl "資産番号"
    Exit Sub
End If

資産番号が空欄の場合に、処理をそこで終了させるというコードです。

一連の流れをまとめると・・・

If IsNull(Me!資産番号) = True Then
    Beep
    MsgBox "資産番号が未入力です", vbOKOnly + vbExclamation, "主キー入力チェック"
    Cancel = True
    DoCmd.GoToControl "資産記号"
    Exit Sub
End If
If Not IsNull(DLookup("資産番号", "T-機器情報テーブル", "資産番号='" & Me!資産番号 & "'")) Then
Beep
MsgBox "入力された資産番号「" & Me!資産番号 & "」はすでに登録されています", vbOKOnly + vbExclamation, "主キー重複チェック"
cancell = True
DoCmd.GoToControl "資産番号"
Exit Sub
Else
DoCmd.SetWarnings False
DoCmd.OpenQuery "追加-機器情報テーブル"
DoCmd.SetWarnings True
Me!機器番号 = Null
Me!資産番号 = Null
Me!機器分類 = Null
Me!品名 = Null
Me!型番 = Null
Me!メーカー = Null
Me!備考 = Null
DoCmd.GoToControl "機器番号"
End If

こうなります。

フォームビューに切り替えて確認をしまうす。

資産番号を空欄にして、保存を押すと・・・

ちゃんとエラーメッセージが出ますね。

よかったらシェアしてね!
  • URLをコピーしました!
  • URLをコピーしました!

この記事を書いた人

こんにちはAccessの壺です。
臨床工学技士としてどこかの病院で働いています。
夜な夜なMicrosoftAccessで遊びたおして、独学で病院内のいろんなシステムを開発してきました。
透析患者さんの透析条件管理システムやME機器管理システム、アンケート集計などなど作ってきました。
Accessの楽しさを発信するために、このサイトを運営中。

コメント

コメントする

目次