Microsoft Access 掲示板

追加クエリで重複を確認したい

7 コメント
views
4 フォロー

追加クエリを実行した際、既存のデータと比較して特定フィールドに重複があった場合「追加してよいですか?」と確認し、「はい」を選んだ場合、別のフィールドに連番を振るようなVBAを設定したいです。
ご教示いただけませんでしょうか。

coffee
作成: 2020/07/20 (月) 12:13:00
通報 ...
1

とりあえず現状のできているところまでいいのでVBAを提示してもらえますか。

あと、情報が不足しているので、下記の点についても補足してください。

  1. 追加するデータはどこにどんな形でありますか。
    例えば、
    非連結フォームのテキストボックスに入力してある(1レコード)
    別テーブルにあるデータ(複数レコード)
    外部からインポートまたはリンクしたでータ(複数レコード)
  1. 追加先テーブルのテーブル名、フィールド名、主キー設定
2
coffee 2020/07/22 (水) 13:26:54 1d451@23a22

今のところVBAは使っておりません。現在、帳票のフォーム(F_案件)で、任意の案件のボタンを押すと、
マクロ実行「クエリを開く」(Q_特殊案件追加という名前の追加クエリが実行される)して、
F_特殊案件に任意の案件データが追加される

という仕組のみとなっております。

追加するデータ(T_案件)は、外部からインポートしたデータ(複数レコード)です。今のところリンクはしていません。
(将来的にはリンクするかも。現在まだ設計中なのでリンクにすると修正が面倒だったのでまだしていません)

●追加先テーブルについて

テーブル名:T_特殊案件
フィールド名:案件番号、顧客番号、発送番号、フォルダパス
主キー:特殊案件番号

以上です。

3

現在のところ、特殊案件番号はオートナンバーにしています。
また、T_案件の主キーは案件番号です。

基本的には1つの案件番号に1つの特殊案件番号となる場合が多いのですが、稀に1つの案件番号の中に複数の情報が含まれており、特殊案件テーブルではそこをバラバラにしたい…というイメージです。
ただ、すでに特殊案件にコピーしているのに間違って2回目でコピーするのは防ぎたいため「既に存在しています。本当に追加してよいですか?」とのメッセージを出したく思っています。

T_特殊案件では、主キーを「案件番号+案件番号が存在する数の連番」みたいな形にしたいです。

4
hiroton 2020/07/22 (水) 15:11:37 fc2dc@f966d

個人的な意見ですが、複数フィールドをチェックするようにして、しっかりと重複データは登録しないシステムにしたほうがいいんじゃないかなぁと

簡易チェックで処理の分岐をユーザーに求めて作業が止まるのも、処理の選択に対する人為的なミスを考えるのもいまいちな気がするので

連番についてはオートナンバーのようなキーがあるなら必要になってから作ればいいので質問のような追加クエリを実行する段階ではいらないと思います

5
coffee 2020/07/22 (水) 15:20:19 1d451@23a22

そうですね…増やしたい理由もあったのですが、
その方向で考え直してみようかなという気もしてきました。
初心者ながら、設計について周りに相談できる相手がいないので、お言葉いただけてありがたいです。

6
hiroton 2020/07/22 (水) 17:39:59 fc2dc@f966d >> 5

うまく伝わっていないとアレなので

既存のデータと比較して特定フィールドに重複があった場合「追加してよいですか?」と確認し、「はい」を選んだ場合

このようなユーザーの判断が挟まる処理は減らしたほうが楽ができますよという話です

例えば、「特殊案件として案件番号がすでに登録されていたらメッセージを表示して~」というのが質問時点での想定だと思いますが、

「案件番号」と「発送番号」を同時に重複チェックして、全く同じデータがあれば追加不可、「案件番号」に重複があっても「発送番号」が異なっていれば追加する

というような、重複とみなさないルール(=重複としてはじくルール)、つまり、確認メッセージを出したときにユーザーが「はい」と選ぶ基準をそのままシステムに実装しましょうということです。

あまり質問の内容に即した回答でもないので「やりたいこと」はそのままやりたいことリストにしておいてもいいと思いますよ


多分やりたいことがいっぱいあって(連番の扱いとか)全部の内容に一発で決まるような回答も難しいと思うので問題点を整理して番号を振ってみるといいと思います。回答側もどの部分についてなのか指摘しやすいので

7

ただ、すでに特殊案件にコピーしているのに間違って2回目でコピーするのは防ぎたいため「既に存在しています。本当に追加してよいですか?」とのメッセージを出したく思っています。

追加クエリでは1レコードずつチェックしてメッセージを出してユーザーに選択されるというのは難しいですね。

とりあえず追加クエリで追加してしまってから、重複があったら、重複データを抽出表示して、そのデータをみて必要か不要かをユーザーに判断させて、不要なら、不要な方を削除させる、というようなユーザーインターフェイスがいいのではないでしょうか。

hiritonさんの提案されている重複を判断するルールを明確に決めることかできるならそれをシステムに組み込んだほうがいいでしょう。
そのうえで厳密にルールだけでは決められない、人間の判断が必要という場合は、上記の方法を採用するということになるかと思います。