「T_ORDER」という受注データが格納されたテーブルデータをもとに、各受注品の機械設定を
フォーム「F_機械設定入力」を使って「T_機械設定」に格納しています。「T_ORDER」と「T_機械設定」は[口座番号]という短いテキスト型のフィールドでリレーションが組まれています。
「F_機械設定入力」には、値集合ソースが「T_ORDER」のコンボボックス「cmb_口座番号」があって
口座番号を選択することで、口座番号・品名などの基本情報を吸い出しています。
作業者が、現在作業中の機械設定を登録しようとした時、設定が既に登録されていた場合を想定して
重複エラーのメッセージを入力工程の ”なる早" で出したいと思い、フォームで最初に行う「cmb_口座番号」での
口座番号の選択時を狙って、更新前処理で下記を設定したところ、重複関係なく全ての口座番号でエラーメッセージ
が出力されてしまいました。
DCount("口座番号", "T_機械設定", "[口座番号]=[cmb_口座番号]")=0
フォームでは「cmb_口座番号」を使った吸い出しとは別に、口座番号や品名を手入力できるようテキストボックスを
用意してあるので、「txt_口座番号」に重複した口座番号を入力した時にもメッセージが出力されるよう、入力規則
に下記のような設定をしたところ、正常にメッセージが出力されました。
DCount("*","T_機械設定","[口座番号]=[txt_口座番号]")=0
が! 入力した口座番号を削除しない限り、マウス操作するたびにメッセージが出力されてしまい、
最終的には「…レコードを保存するときにエラーが発生した可能性が…」というメッセージまで出現して、
入力者にとっては、とても面倒臭い状況に陥りました。
私が目指す状態は下記の2点です。知恵を与えて下さい!
どうぞよろしくお願いします!
1.cmb_口座番号で重複した口座番号を選択した直後にメッセージを出力。
2.txt_口座番号の重複入力で出力される煩いメッセージを抑制したい。
VBA内でDCount関数を使用するときは、参照するコントロールは文字列の外にだす必要があります。""内にいれたら単なる文字列ですのでコントロールを参照できません。下記のようにしてください。
ご希望のことは、
「F_機械設定入力」の「cmb_口座番号」には、「T_機械設定」にすでに存在している口座番号は入力できないようにしたい。
ということですよね。
ならば、メッセージを出すより、最初から「cmb_口座番号」のドロップダウンリストからすでに存在している口座番号を除いておいて選択できないようにするのがいいでしょう。
「cmb_口座番号」の値集合ソースに下記のSQLを設定。
「cmb_口座番号」のフォーカス取得時のイベントプロシージャを下記のように記述。
これで「T_機械設定」に既に存在する口座番号はリストに表示されないので選択できません。
リストから選択せずにテキストボックス部に直接入力した場合に備えて、
「cmb_口座番号」の「入力チェック」プロパティを「はい」に設定して、
リスト外入力時のイベントプロシージャを下記のように記述します。
hatenaさん、
お騒がせしました。
アレコレ考えず、素直に試したところ
ご提示して頂いた方法で、希望のカタチに
なりました。ありがとうございました!
値集合ソースからSQLを入力するのが
初めてだったので、?となってしまいました。
また一つ勉強になりました。