https://www.youtube.com/watch?v=Irr_9wx6CAY
標準モジュールにDCountを利用したチェック関数を追加する
Option Compare Database Option Explicit '0.商品コードを受け取り '1.マスターに、受け取ったコードがあるかチェック '2.明細、履歴にダブりがあるか、チェックする '商品コードを受け取りをチェック結果をエラーならTrueで返す関数 Public Function chk商品コード(str商品コード As String) As Boolean Dim nCNT As Integer '1.マスターに、受け取ったコードがあるかチェック 'そもそも、その商品コードが、マスターにあるかチェック nCNT = DCount("商品コード", "T_メニュー一覧", "[商品コード] = '" & str商品コード & "'") 'データが0なら、見つからなかったので、マスター登録エラー If nCNT = 0 Then MsgBox str商品コード & "が見つかりません、マスターを確認してください" chk商品コード = True 'チェックエラー true Exit Function 'ここでチェックを抜ける End If '2.明細、履歴にダブりがあるか、チェックする '履歴に(明細に)、同じ商品があった時、エラーにする nCNT = DCount("商品コード", "T_注文履歴", "[商品コード] = '" & str商品コード & "'") 'データが0以上なら、重複エラー If nCNT > 0 Then MsgBox str商品コード & "は重複してます、再入力" chk商品コード = True 'チェックエラー true Exit Function 'ここでチェックを抜ける End If 'エラーじゃないので反対のFalseを返す chk商品コード = False 'チェックOK False End Function
次に、F_注文履歴の商品コード
商品コードのチェックをしたかったので、
商品コードの更新前処理にコードを追加する
Option Compare Database Option Explicit Public dbsTeishokuya As Database Private Const formnameTEST = "F_注文履歴" Public Sub 商品コード_BeforeUpdate(Cancel As Integer) 'そもそも、本当に変更されたか、チェックする If Me.商品コード.Value = Me.商品コード.OldValue Then 'MsgBox "ここ、同じでした" Exit Sub '同じときは、チェックしない End If 'チェック関数を通して(リターン値でもらって)TrueならキャンセルもTrue Cancel = chk商品コード(Me.商品コード) End Sub Private Sub 商品コード_DblClick(Cancel As Integer) DoCmd.OpenForm "F_メニュー一覧", , , , , , "F_注文履歴" End Sub
F_一覧 も 選択後に、チェックしたかったので、関数を呼ぶように変更する
Option Explicit Option Compare Database Private Sub 選択_Click() Const sub_choice As String = "選択_click" Dim menucode As String '商品コード menucode = Me.商品コード.Value If chk商品コード(menucode) = True Then Exit Sub '↑でエラーだったら、↓下のセット処理&閉じる処理をしたくないので、 'やりたくないので、途中で抜ける End If '↑正常なら、親フォームにコードをセットして、選択フォームを閉じる Forms(Me.OpenArgs).商品コード.Value = menucode '親フォームにデータをセット DoCmd.Close acForm, "F_メニュー一覧" '選択フォームを閉じる End Sub