Microsoft Access 掲示板

Accessのフォームの日付テキストボックスに入力する値が重複していると新規に入力できなくするには?

10 コメント
views
4 フォロー

お世話になります。早速本題に入ります。

タイトルに書きましたように、
フォームの日付のテキストボックスに
例えば、2021/08/18というデーターが過去に
あったなら、カレンダーや手入力で2021/08/18と
入力できなくする方法はありますか?

できれば、エラーメッセージが出て、
メッセージボックスのことですが、
既に入力された日付です。OK、NO
みたいな形に表示出来たらいいな!と
思っております。

お手数ですが、
御指南をヨロシクお願い致します。

P.S.
ネットで調べていると、
クエリは重複の値を表示させないという
機能があるみたいですね。

でも、似てるけど、違う…ということで
ここでご質問させていただきました。

ワッフル
作成: 2021/08/18 (水) 18:58:30
通報 ...
1
りんご 2021/08/18 (水) 22:26:39 c564b@0e907

フォームの日付のテキストボックスに

まずは、状況確認ですが、もしかしてこんな感じですか?
あと、どのテキストボックスがイメージに近いでしょうか?

親テーブル:日付ID,日付
子テーブル: 主キー,日付ID,その他
メインフォーム連結クエリ:日付ID,日付
サブフォーム連結クエリ:主キー,日付ID,日付,その他

フォームヘッダー
 日付テキストボックス(非連結):
詳細
日付ID:(新規)
日付 :
フォームフッダー
    📋サブフォーム
      サブフォームヘッダー
      日付テキストボックス(非連結):
      サブフォーム詳細

主キー日付ID日付その他フィールド
112021/08/18ほにゃらら
(新規)

            

主キー日付ID日付その他フィールド
112021/08/18ほにゃらら
(新規)2021/08/18

            

主キー日付ID日付その他フィールド
112021/08/18ほにゃらら
22021/08/18
(新規)

            

主キー日付ID日付その他フィールド
112021/08/18ほにゃらら
22021/08/18
(新規)2021/08/18

            

主キー日付ID日付その他フィールド
112021/08/18ほにゃらら
22021/08/18
(新規)2021/08/18

                                            親テーブル

主キー日付ID日付その他フィールド日付ID日付備考
112021/08/18ほにゃらら12021/08/18
22021/08/1822021/08/18
3
(新規)(新規)
3
りんご 2021/08/20 (金) 00:52:28 c564b@0e907 >> 1

 ごめんなさい、こちらにミスがありました。『リンク親フィールド:日付ID、リンク子フィールド:日付ID』のつもりが、『リンク親フィールド:日付、リンク子フィールド:日付』となっていました。サブフォームで示した件は間違いです。

2
hiroton 2021/08/19 (木) 09:05:32 6e3e0@f966d

例えば、2021/08/18というデーターが過去に
あったなら、カレンダーや手入力で2021/08/18と
入力できなくする方法はありますか?

インデックスを使用してテーブル フィールドの値の重複を防ぐ


既に入力された日付です。OK、NO
みたいな形

これはOKなら重複を許すということですか?
上記方法はデータベース的に重複を許さない形なので、これをやりたい場合は自前で制御を組む必要があります。更新前処理イベントで入力しようとした値がすでに登録されているかどうかチェックすればいいですね

Private Sub 日付_BeforeUpdate(Cancel As Integer)
    If Not IsNull(DLookup("日付", "テーブル名", "日付=#" & Me.日付 & "#")) Then
        If MsgBox("既に入力された日付です。登録してもいいですか?", vbOKCancel) = vbCancel Then
            Cancel = True
        End If
    End If
End Sub
4
ワッフル 2021/08/20 (金) 14:34:32 be3da@318ee

りんごさん、hirotonさん
お二人様

御指南ありがとうございます。
どちらもかなり難しそうなので、
しばらくお時間をください。

ちょっと研究してみようと思います。

>hirotonさん

これはOKなら重複を許すということですか?

これは、自分で書きながら、
改めて考えると重複を一切許さない方がいいかな?
と思いました。重複のお知らせと
入力キャンセルのみのメッセージボックスが
開いた方がいいかもしれないと思いました。

こうした場合は、どうしたらよいでしょう?

5
ワッフル 2021/08/20 (金) 14:36:23 be3da@318ee

返信がわかりづらかったので、
再投稿です。

(レスの引用の仕方が
いまいちよく把握できてません)

りんごさん、hirotonさん
お二人様

御指南ありがとうございます。
どちらもかなり難しそうなので、
しばらくお時間をください。

ちょっと研究してみようと思います。

>hirotonさん
>これはOKなら重複を許すということですか?

これは、自分で書きながら、
改めて考えると重複を一切許さない方がいいかな?
と思いました。重複のお知らせと
入力キャンセルのみのメッセージボックスが
開いた方がいいかもしれないと思いました。

こうした場合は、どうしたらよいでしょう?

6
hiroton 2021/08/20 (金) 15:17:10 13d29@f966d

重複を許さないだけならすでに挙げた方法でいいですが、既定のメッセージじゃ使いにくいのはありますね。2つ目の方法でメッセージを出してキャンセルする(=条件分岐を入れない)ようにすればいいです

Private Sub 日付_BeforeUpdate(Cancel As Integer)
    If Not IsNull(DLookup("日付", "テーブル名", "日付=#" & Me.日付 & "#")) Then
        MsgBox "既に入力された日付です。異なる日付を入力してください"
        Cancel = True
    End If
End Sub
7
ワッフル 2021/08/24 (火) 13:24:59 bd37f@318ee >> 6

この度はいろんな方に御指南していただきまして、
ありがとうございました。

無事、hirotonさんの記載くださった方法で、
問題が解決しました。

どうもありがとうございました。

8
ワッフル 2021/09/14 (火) 13:21:57 946f7@318ee >> 6

先日は皆様に大変お世話になりました。

そして、またご質問させてください。
先日hiroton さんに
お教えいただいた以下のプログラムを入れました。

Private Sub 日付_BeforeUpdate(Cancel As Integer)
    If Not IsNull(DLookup("日付", "テーブル名", "日付=#" & Me.日付 & "#")) Then
        MsgBox "既に入力された日付です。異なる日付を入力してください"
        Cancel = True
    End If
End Sub

そうして、希望通り重複エラーを出せるようになったんです。

ところがです。

私は、関連のデーターをすべて消しました。
そうしてシステムを最適化しました。

そうしてオートナンバーを1からスタートに
して使おうとしました。

すると、
「既に入力された日付です。異なる日付を入力してください」
というエラーが出るように成りました。

日付は、本日の日付(2021/09/14)です。
入力できないので、1日ずらして(2021/09/15)を
入力しました。

そうして気になってテーブルを覗くと、
2021/09/14と2021/09/15で
データーが入力されていました。

こういったエラーはどうしたら
取り除けますか?

その後は普通に入力できるので、
データーをオールクリアして最適化して、
オートナンバーを1から始めるようにしたときに
だけエラーが出るみたいです。

すごく細かい質問になって
失礼します。

お手数ですが、ぜひ御指南ください。

9
りんご 2021/09/14 (火) 14:09:39 c564b@0e907 >> 8

 旧質問が解決済だから、新しい質問をたてるのは、どうですか?
 日付を入力したテキストボックスは、非連結ですか、それとも、◯◯テーブルもしくは△△クエリのほにゃららフィールドに連結していますか?新しい質問で教えて下さい。

10
hiroton 2021/09/15 (水) 08:22:35 a2c3c@f966d >> 6

そうして気になってテーブルを覗くと、
2021/09/14と2021/09/15で
データーが入力されていました。

この部分のコードにレコードを勝手に登録するような内容はありません。データを削除した後、「今日ではない日付」を最初に入力した場合に同じエラーメッセージが表示されますか?
(例えば「今日」が2021/9/15なら2021/9/16を入力します)

その後テーブルを開いて内容を確認してください。何が登録されていますか?