- ベストアンサー
Accessでのレコード存在チェック
下記のような仕様のAccessで機能追加したく どうしてもうまくいかないので方法を教えてください。 フォーム:申込書(データソースは申込テーブル) テーブル:申込テーブル ---------- 申込番号 申込氏名 申込日 ---------- フォームの申込書からはフリーテキストで ユーザが申込書番号を入力しますが、 すでに申込テーブルに存在している場合は エラーメッセージを表示させたいと思っています。 よろしくお願いいたします。
- みんなの回答 (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 これで出来るはずです。
その他の回答 (2)
単純にやれば、テーブルの氏名フィールドでインデックスを「はい(重複なし)」としてやることで氏名の重複の入力は避けられます。 フォーム側は入力用のコマンドボタンのイベント内のエラーだった時のMSGBOXで表示させる内容を変えれば良いかと思います。
補足
説明不足ですみません。 既存システムの改修なのでできればインデックスの張り替えなどはさせたくないと思っています。
- ipsum11
- ベストアンサー率21% (55/251)
varX = DLookup("[申込番号]", "申込テーブル", "[申込番号] = 入力した申込書番号") で、varX を調べれば存在チェックになると思います。 申し込み番号が返ってくれば存在、返ってこなければ存在していない。
補足
ありがとうございます。 フォームのデータソースが申込テーブルになっているので、フォームに申込番号を入力すると存在すると認識してしまうようです。
お礼
大変失礼いたしました。 うまくいかなかったのは他の部分のモジュールが あやまっていたからでした。 おかげさまでうまくいくようになりました! 感謝しております。
補足
ありがとうございます。 私もSQLを使った方法でずっと試していたのですが、 教えていただいた方法だと、やはりチェックをすり抜けてしまいます。投げたSQLの結果をどこかに表示させて確認してみたいのですが、教えていただけませんでしょうか。