おすすめのモーニング・朝食メニューを教えて!

下記のような仕様のAccessで機能追加したく
どうしてもうまくいかないので方法を教えてください。

フォーム:申込書(データソースは申込テーブル)

テーブル:申込テーブル
----------
申込番号
申込氏名
申込日
----------

フォームの申込書からはフリーテキストで
ユーザが申込書番号を入力しますが、
すでに申込テーブルに存在している場合は
エラーメッセージを表示させたいと思っています。

よろしくお願いいたします。

A 回答 (3件)

フォームの申込番号のプロパティを開き更新前処理のイベントに下記をコピーしてください。


(フォームの申込番号のコントロール名が申込番号で良ければそのまま違う場合は変更してください。)

Dim Rs As ADODB.Recordset
Dim strSQL As String

Set Rs = New ADODB.Recordset
strSQL = ""
strSQL = strSQL & " Select * From 申込テーブル "
strSQL = strSQL & " Where 申込番号 = 申込番号"

Rs.Open strSQL, CurrentProject.Connection

If Not Rs.EOF Then
MsgBox "重複しています", vbCritical, "登録エラー"
Cancel = True '更新をキャンセル
Me!申込番号.Undo '入力を元に戻します

End If
Rs.Close: Set Rs = Nothing

これで出来るはずです。

この回答への補足

ありがとうございます。
私もSQLを使った方法でずっと試していたのですが、
教えていただいた方法だと、やはりチェックをすり抜けてしまいます。投げたSQLの結果をどこかに表示させて確認してみたいのですが、教えていただけませんでしょうか。

補足日時:2006/03/30 16:37
    • good
    • 0
この回答へのお礼

大変失礼いたしました。
うまくいかなかったのは他の部分のモジュールが
あやまっていたからでした。
おかげさまでうまくいくようになりました!
感謝しております。

お礼日時:2006/03/30 17:08

単純にやれば、テーブルの氏名フィールドでインデックスを「はい(重複なし)」としてやることで氏名の重複の入力は避けられます。


フォーム側は入力用のコマンドボタンのイベント内のエラーだった時のMSGBOXで表示させる内容を変えれば良いかと思います。

この回答への補足

説明不足ですみません。
既存システムの改修なのでできればインデックスの張り替えなどはさせたくないと思っています。

補足日時:2006/03/30 15:33
    • good
    • 0

varX = DLookup("[申込番号]", "申込テーブル", "[申込番号] = 入力した申込書番号")


で、varX を調べれば存在チェックになると思います。
申し込み番号が返ってくれば存在、返ってこなければ存在していない。

この回答への補足

ありがとうございます。
フォームのデータソースが申込テーブルになっているので、フォームに申込番号を入力すると存在すると認識してしまうようです。

補足日時:2006/03/30 15:55
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報

このQ&Aを見た人がよく見るQ&A