
Access初心者です。
重複データを入力した際、任意のメッセージを表示して入力をできないようにしたいと考えています。
具体的には、
テーブル1に、「姓」「名」「勤務先」があり、
クエリ1をもとにフォーム1が「姓」「名」「勤務先」のテキストボックスを持っています。
フォーム上で「姓」と「名」を入力した際、「姓」&「名」が重複した場合(同姓同名の場合)に、他のコントロールへの移動やデータ保存ができないようにするにはどうしたらいいでしょうか。
できれば、マクロやVBAを使わずに済ませたいと思いますが、簡単な方法をご存知の方、教えていただければ幸いです。
よろしくお願いいたします。
No.5ベストアンサー
- 回答日時:
横レス失礼致します。
> テキストボックスの入力規則欄に「DCount("*","テーブル1"," [テーブル1]![姓]=[姓]")=0」と入力
「"」(ダブルクォーテーション)内に入れた「姓」はテーブル1のフィールドとして判断されてしまうため、
上記の式では意図した動作にはならないものと思います。
(姓がNullでないレコードが1件以上あった時点で、何を入力しても入力規則違反?)
とりあえず、フォーム上の入力/編集で『姓』の重複を一切認めない、とする場合の入力規則欄の
式は以下のようになります:
DCount("*","テーブル1","[ID]<>" & [ID] & " And [姓]='" & [姓] & "'")=0
『ID』は、レコードを一意に特定できるフィールド(→主キーなど)で、数値型を想定しています。
これを追加しておかないと、「既存データを間違えて上書きしかけたため、同じ姓を入力し直そうと
した」ときに、DCount関数の戻り値が「1」となり、弾かれてしまうことになります。
(新規追加時や、一旦別の姓で上書保存してから元に戻した場合は、弾かれませんが)
※上記の式は、テキストボックス名とフィールド名が同一という前提です。
なお、データ型がテキスト型と推測される『姓』についての条件式では、右辺に相当する部分が
「'」(シングルクォーテーション)で括られる形になっていること、また「And」の前後に半角スペースが
入っていることに注意してください。
(『「"」「 」(スペース)、「And」、「 」、「[姓]」、「=」、「'」、「"」』と、『「"」、「'」、「"」』の塊の部分)
さらに(注釈が多くて恐縮ですが)、IDは必ず『姓』『名』よりも先に入力しておく必要があります。
(DMax+1で既定値を設定するか、フォームの挿入前イベントで代入するのがよいかと思います)
姓と名が別フィールドで同姓同名を不可とする場合は、『姓』と『名』のテキストボックスの双方で、
入力規則の式を以下のように設定します:
DCount("*","テーブル1","[ID]<>" & [ID] & " And [姓]='" & [姓] & "' And [名]='" & [名] & "'")=0
・・・以上です。
「'」は全部で4つ(→「[姓]」と「[名]」をそれぞれ括る)あるなど複雑ですが、間違いなく入力して下さい。
DexMachinaさん、レスありがとうございました。
非常に参考になりました。
シングルクォーテーションを使うことなど思いもよりませんでした。感動です。
わかりやすい注釈もたくさん付けていただき、応用する際の勉強にもなりました。
ご指摘の通りテストしてみましたところ、問題なく作動しました。
今後は、教えていただいた点も参考にしつつ、もう少し勉強をしてみたいと思います。
ありがとうございました。
No.3
- 回答日時:
#1です。
#2の表記に間違いがありました。誤:
・ダイアログの板の方の「固有」に「はい」を設定。
正:
・ダイアログの下の方の「固有」に「はい」を設定。
この回答への補足
vizzarさん、何度も丁寧にご指導くださりありがとうございます。
インデックスによる方法は最初に試みました。
たしかに重複を避けることはできますが、
(1)重複を避けたいフィールドの入力だけでは足りず、全部のフィールドを入力しなければ、重複かどうかの判断をしてくれないこと(同姓同名の場合に、「名」以降の他のコントロールへの移動やデータ保存ができないようにしたいと考えています)、
(2)「インデックス、主キー、またはリレーションシップで値が重複しているので…」というAccess既定のメッセージボックスが表示されてしまうこと(任意のメッセージを表示させたいと考えています)、
の2点をクリアできません。
また、フォーム上から、テキストボックスの入力規則欄に「DCount("*","テーブル1"," [テーブル1]![姓]=[姓]")=0」と入力する方法を知りましたのでやってみましたが、あらゆる場合にエラーメッセージが出てしまいます。
こちらの方が、上記(1)(2)の点はクリアできるので、できればこの方法によりたいと考えていますが、うまくいかないので頭を抱えています。
どこが悪いのか、問題点についてご指摘いただければ幸いです。
No.2
- 回答日時:
#1です。
複数フィールドを纏めてインデックスをつける方法ですが、
1.そのテーブルを選択して、「デザイン」をクリック。
2.「鍵」アイコンの右にある「稲妻」マークの「インデクス」アイコンをクリック。
3.インデックス・ダイアログの
・インデックス名の1行目に適当な名前(「氏名」など)を入力。
・フィールド名の1行目をクリックして、「▼」を押して、「姓」のフィルドを選択。
・ダイアログの板の方の「固有」に「はい」を設定。
・フィールド名の2行目をクリックして、「▼」を押して、「名」のフィルドを選択。
以下のようになればOK.
┌──────┬─────┬──────┐
│インデックス名│フィールド名│並べ替え順序│
├──────┼─────┼──────┤
│氏名 │姓 │昇順 │
├──────┼─────┼──────┤
│ │名 │昇順 │
├──────┼─────┼──────┤
・
・
└──────┴─────┴──────┘
・ダイアログの「×」を押してダイアログを閉じる。
・フィールド・リストの「×」を押してフィールド・リストを閉じる。
変更医を存するかどうかを聞かれるので、「はい」をクリック。
これで、複数のフィールドで「重複なしインデックス」が設定されます。
No.1
- 回答日時:
デーブルのインデックスを、姓名での重複なしにすれば可能です。
しかし、このようにしてしまうと、本当に同姓同名の人を追加できなくなってしまいます。
少なくとも、おなじものが無いような項目の組み合わせで、「重複なし」のインデックスをつけるべきです。
「姓+名+電話番号」など。これとて電話番号が解らないとハナシになりませんが....
重複を避けるのは、思っているほど簡単ではありません。
「VBAはイヤだ」といわれていますが、いろいろなことをしたいと思っていれば、
遅かれ速かれ手をつけなけならない状況になっていきますから、
今から少しづつでも勉強を始められることを強くお勧めします。
この回答への補足
vizzarさん、ありがとうございます。
同姓同名の重複登録は不要という前提で結構です。
テーブルのインデックスを、姓名での重複なしにする、という点ですが、テーブルでは「姓」「名」が別フィールドになっています。
この点、どのように対応すればよろしいか、ご教示賜れれば幸いです。
また、インデックスをつける方法では、Accessのエラーメッセージのダイアログが表示されますが、これを表示させずに、他のコントロールへの移動やデータ保存を止めるにはどうしたらよいでしょうか。
フォームの当該テキストボックスのプロパティの入力規則から制限を掛ける方法も試みましたがうまくいきません。
もし、この方法をご存知でしたらこの点につきましてもお知恵を拝借できればと思います。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
このQ&Aを見た人はこんなQ&Aも見ています
-
accessで重複を防ぎたい
Access(アクセス)
-
access ダブリ登録を防止したい
Access(アクセス)
-
access追加クエリ実行時の重複を防ぎたい
その他(コンピューター・テクノロジー)
-
-
4
ACCESS入力での重複キーチェック
Access(アクセス)
-
5
アクセスVBAのMe!と[ ]
Access(アクセス)
-
6
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
7
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
8
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
9
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
10
access・カウント結果がゼロでも、「0」を表示させるには?
その他(データベース)
-
11
アクセス関数を使って、重複チェック
その他(Microsoft Office)
-
12
AccessでIDを入力したら他の項目も自動で表示
Access(アクセス)
-
13
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
14
サブフォームに対してGoToRecordするには?
その他(Microsoft Office)
-
15
ACCESSでVBAから選択クエリの抽出条件を指定したい
Access(アクセス)
-
16
追加クエリで重複データなしで追加したい
Visual Basic(VBA)
-
17
accessでオートコンプリート機能みたいな
その他(データベース)
-
18
ACCESSのフォームで次のレコードに移動しない方法を教えてください
その他(データベース)
-
19
Access サブフォームでの選択行の取得
その他(データベース)
-
20
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
関連するカテゴリからQ&Aを探す
今、見られている記事はコレ!
-
弁護士が解説!あなたの声を行政に届ける「パブリックコメント」制度のすべて
社会に対する意見や不満、疑問。それを発信する場所は、SNSやブログ、そしてニュースサイトのコメント欄など多岐にわたる。教えて!gooでも「ヤフコメ民について」というタイトルのトピックがあり、この投稿の通り、...
-
弁護士が語る「合法と違法を分けるオンラインカジノのシンプルな線引き」
「お金を賭けたら違法です」ーーこう答えたのは富士見坂法律事務所の井上義之弁護士。オンラインカジノが違法となるかどうかの基準は、このように非常にシンプルである。しかし2025年にはいって、違法賭博事件が相次...
-
釣りと密漁の違いは?知らなかったでは済まされない?事前にできることは?
知らなかったでは済まされないのが法律の世界であるが、全てを知ってから何かをするには少々手間がかかるし、最悪始めることすらできずに終わってしまうこともあり得る。教えてgooでも「釣りと密漁の境目はどこです...
-
カスハラとクレームの違いは?カスハラの法的責任は?企業がとるべき対応は?
東京都が、客からの迷惑行為などを称した「カスタマーハラスメント」、いわゆる「カスハラ」の防止を目的とした条例を、全国で初めて成立させた。条例に罰則はなく、2025年4月1日から施行される。 この動きは自治体...
-
なぜ批判コメントをするの?その心理と向き合い方をカウンセラーにきいた!
今や生活に必要不可欠となったインターネット。手軽に情報を得られるだけでなく、ネットを介したコミュニケーションも一般的となった。それと同時に顕在化しているのが、他者に対する辛らつな意見だ。ネットニュース...
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
姓名の表記法について
-
男性がある女の人に下の名前何...
-
Excelの並べ替えで濁点・半濁点...
-
自分の会社の社員にMr.をつ...
-
【女性へ質問】女性の友だち同...
-
「氏」の使い方
-
漫画や教科書などでよく見かけ...
-
姓名のローマ字表記が、2020.1....
-
名前とはなぜ前がつくのか?
-
姓名判断のときの苗字
-
Accessで重複データを入力でき...
-
Accessのレポートに取り消し線...
-
ごめんなゴンザレスって何です...
-
もし、夫婦別姓の法律ができた...
-
ご祝儀袋に札に苗字だけは非常識?
-
苗字についての質問です
-
姓と名はどちらがより大事だと...
-
「AとB」、「AやB」、「AやBな...
-
クリスチャンの方々へ:あなた...
-
it’s difficult to discussed t...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
姓名の表記法について
-
もし、夫婦別姓の法律ができた...
-
名前とはなぜ前がつくのか?
-
男性がある女の人に下の名前何...
-
結婚するときに姓を決める時に...
-
自分の会社の社員にMr.をつ...
-
「氏」の使い方
-
Excelの並べ替えで濁点・半濁点...
-
外国人の名前に使われる”・”や”...
-
【女性へ質問】女性の友だち同...
-
Accessのフィールド結合について
-
ご祝儀袋に札に苗字だけは非常識?
-
Accessで重複データを入力でき...
-
竹取物語の翁の名前の読み方
-
フランス語 Dugat-pyのpy?
-
ドコモ 改称?名義変更?
-
氏名のイニシャルを「姓・名」?
-
年賀状の宛名書きについて
-
りんそくじょの漢字、一度は間...
-
中国の姓名
おすすめ情報