
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で質問しましょう!
似たような質問が見つかりました
- その他(プログラミング・Web制作) 入力フォームへ、データを自動的に入力するプログラム。どうやって作る? 4 2023/01/16 10:24
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Access(アクセス) Accessの参照フィールドの列がずれてしまいます 1 2023/07/19 15:00
- Excel(エクセル) エクセルで”入力シート”の文字書式の変更を”出力シート”で同じ文字書式で印刷したいです。VBA希望 4 2023/04/24 11:07
- Visual Basic(VBA) 列と行の名前(重複あり)が交差するセルに、データを入力したい 2 2022/06/25 22:42
- Access(アクセス) Accessフォームで複数条件でフィールドの値を表示する方法 4 2022/07/21 10:47
- その他(データベース) pythonでsqlight勉強中、クエリー結果の利用法教えて下さい 1 2022/04/28 20:38
- その他(社会・学校・職場) どうすればいいですか?登録時、姓・名の順番に注意して入力してください。と言われたのですが設定する画面 2 2022/04/14 19:38
このQ&Aを見た人はこんなQ&Aも見ています
-
accessで重複を防ぎたい
Access(アクセス)
-
access ダブリ登録を防止したい
Access(アクセス)
-
access追加クエリ実行時の重複を防ぎたい
その他(コンピューター・テクノロジー)
-
-
4
Access サブフォームでの選択行の取得
その他(データベース)
-
5
Accessで別テーブルの値をフォームに表示したい
その他(データベース)
-
6
ACCESSのフォームからデータの追加ができない
その他(データベース)
-
7
ACCESS入力での重複キーチェック
Access(アクセス)
-
8
レコードを保存するコード アクセスvba
その他(Microsoft Office)
-
9
Accessでコードを入れると名前がでるようにしたい
Access(アクセス)
-
10
アクセスVBAのMe!と[ ]
Access(アクセス)
-
11
AccessでIDを入力したら他の項目も自動で表示
Access(アクセス)
-
12
前のレコードの値を自動で入れたい
PowerPoint(パワーポイント)
-
13
access・カウント結果がゼロでも、「0」を表示させるには?
その他(データベース)
-
14
アクセスでテキストボックスの値が空白だったら
Access(アクセス)
-
15
アクセスで数値型のフィールドにNullをいれたい
その他(データベース)
-
16
アクセスで#エラーを表示させない方法は?
Access(アクセス)
-
17
どこにもフォーカスを当てたくない
Access(アクセス)
-
18
access別のテーブルを参照してテキストボックスに値を表示、編集したい
Access(アクセス)
-
19
アクセスで追加した項目に全て同じ値を一発で入れたい
Access(アクセス)
-
20
Accessで文字列の長さによって、フィールドの幅を自動で合わせる方法
Excel(エクセル)
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
姓名の表記法について
-
Excelの並べ替えで濁点・半濁点...
-
男性がある女の人に下の名前何...
-
「氏」の使い方
-
自分の会社の社員にMr.をつ...
-
名前とはなぜ前がつくのか?
-
立憲民主党が、夫婦別姓の夫婦...
-
宮城県
-
外国人の名前に使われる”・”や”...
-
Accessのフィールド結合について
-
Accessで重複データを入力でき...
-
名字のせいでよく在日韓国人と...
-
ご祝儀袋に札に苗字だけは非常識?
-
Accessのレポートに取り消し線...
-
中国の姓名
-
【女性へ質問】女性の友だち同...
-
竹取物語の翁の名前の読み方
-
ドイツ語での宛名の書き方(葉書)
-
英語で自己紹介する時、名・姓...
-
外国人のイニシャル
おすすめ情報