ACCESS2002です。
本日日付が規定値入力されるフォームがあります。基となっているテーブルの「日付」フィールドには主キーが設定されていて、同一日のデータを入力してもレコードとして保存されないようになっています。
しかし、保存の有無がテーブルを直接見ないと判断できないため、システムとしては大変不便です。
そこで、すでに同一日のレコードが存在する場合は、入力終了のボタンを押した時にでも、「すでに同一日での入力があります。このデータは保存されません。」といったメッセージが表示されるようにしたいんですが、どのようにすべきなのかが判りません。
皆さんの知恵をお貸し下さい。
No.1ベストアンサー
- 回答日時:
こんにちは。
maruru01です。こんな感じかな。
If DCount("日付", "テーブル名", "日付 = #" & Me!日付.Value & "#") > 0 Then
MsgBox "すでに同一日での入力があります。このデータは保存されません。"
Cancel = True
Exit Sub
End If
DCount関数は、テーブルのある条件のレコード数をカウントする関数です。
この回答への補足
さっそくの回答ありがとうございます。
書かれてある通り記述してみましたが、Cancel=Trueのところで「変数が定義されていません。」ってエラーになりました。
これはどんな定義をすればいいんでしょうか?
そのあたりの知識があまりないんですが、よろしくお願いします。
No.2
- 回答日時:
テーブル内の同一のデータの入力をさけるために、入力されたデータをテーブル内の検索にかけて、同じものがあるかを判断して、せっかく入力しても、保存されない。
効率的ではありませんね。毎回保存するたびに数万件あるテーブルをいちいち検索して保存するかどうか決めるわけですから。
それより、入力されたデータはすべて受け付けて、二重、三重入力されたレコードを探し、削除するような、メンテナンスをしたほうが、いいと思いますけど。
入力ミスが頻繁に起きるとすれば、業務事態を見直す。
年数回しか起きない入力ミスのために、毎回システムに負荷をかける。どっちがいいんでしょう。
これは、考え方の問題ですから、システム業務全体の見直しをおすすめします。
この回答への補足
さっそくの回答ありがとうございます。
拙い知識で作っているシステムなので、大したものではないんです。せいぜい200~300件程度のデータしか管理しないものですし、1日1回入力があるかどうか・・・っていうものなんです。
チェックをかけるとしても、そのテーブルの最終データとチェックすればいいだけなので、大した負荷にもならないかなと安易に考えました。
お話にあった効率的な方法もどうすればいいのかすぐには思いつきませんし・・・。
確かにおっしゃる通り、あんまり発生しない入力ミスのためにシステムに負荷をかけるのは得策じゃありませんね。
No.3
- 回答日時:
>Cancel=Trueのところで「変数が定義されていません。
」ってエラーになりました。Cancelは、BeforeUpdateイベントプロシージャなどに、最初から用意されている引数です。
フォームのBeforeUpdateに記述すればそのまま使用出来ます。
別の場所(終了ボタンのクリックイベントなど)に記述する場合は、
Cancel = True
の変わりに、保存をキャンセルする処理を記述して下さい。
No.4
- 回答日時:
' こんな感じでどうですか?
' Fld日付はテーブルの日付フィールド。
' Me!日付はFormの日付コントロールです。
Private Sub 登録ボタン_Click()
Dim myRS As ADODB.Recordset
Dim myCN As New ADODB.Connection
Dim SQL As String
SQL = "SELECT Fld日付 FROM テーブル WHERE Fld日付 = #" & Me!日付 & "#"
Set myCN = CurrentProject.Connection
Set myRS = New ADODB.Recordset
myRS.Open SQL, myCN, adOpenKeyset, adLockOptimistic
If myRS.RecordCount > 0 Then
MsgBox "すでに登録済みです。"
Else
'★★★ここに重複のなかった時の作業を書く★★★
End If
myRS.Close
Set myRS = Nothing
myCN.Close
Set myRS = Nothing
End Sub
回答ありがとうございます。
お礼が遅くなって、本当にすみません。
maruru01さんの方法で動きました。
でも、oshiete_kunさんのお返事は別のシステムで活用できる気がするので、参考にさせていただきます。
ありがとうございました。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Accessテーブルの結合で別々のテーブルのフィールドを組み合わせて値を出す方法について 2 2022/07/20 19:43
- Visual Basic(VBA) Accessフォームで全レコードを指定のExcelのセルへ転送し印刷する方法について 2 2022/09/08 18:23
- PHP PHPで入力フォームでデータを確認表示画面まで送る流れを日本語で理解したいのです。 1 2023/05/29 19:12
- Access(アクセス) Accessフォーム 一部のレコードだけを抽出する方法について 1 2022/06/28 18:45
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessのクエリの結果を、既存のエクセルに追加したい 2 2022/07/31 22:44
- Visual Basic(VBA) ExcelからAccessのテーブルに書き込む時に時間がかかる 1 2022/10/14 20:38
- Excel(エクセル) 【vba】日付の形式が勝手に変わってしまう。 1 2022/09/29 10:54
このQ&Aを見た人はこんなQ&Aも見ています
関連するカテゴリからQ&Aを探す
おすすめ情報
このQ&Aを見た人がよく見るQ&A
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
VBA 別シートの同じ日付の欄に...
-
Excleピボットでデータのない部...
-
指定日付を起点にして最新日付...
-
Accessのデータ型の日付/時刻型...
-
BCPでCSV内の文字列をテーブル...
-
DSumの計算式の入れ方
-
Excel→Accessへの日付データの...
-
今週分だけ表示させたい
-
Accessの日付時刻型から日付、...
-
エクセルで書式設定ではなく、...
-
アクセス97のVBAで日付項目をヌ...
-
ACCESSで旬別集計
-
ACCESS フォームの非連結の日...
-
ACCESS フォームで日付を入力し...
-
アクセスで月単位の抽出
-
ACCESS で、古い日付順に抽出し...
-
SQL Server2005のクエリで「今...
-
ビュー定義をプログラムで動的...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
日付型のフィールドに空白を入...
-
SQL文で パラメータが少なすぎ...
-
Excleピボットでデータのない部...
-
Accessの日付時刻型から日付、...
-
アクセスで月単位の抽出
-
VBA 別シートの同じ日付の欄に...
-
Accessのデータ型の日付/時刻型...
-
Excel→Accessへの日付データの...
-
アクセス:既定値に土日含まず...
-
BCPでCSV内の文字列をテーブル...
-
エクセル-過去6カ月分の合計を...
-
Access クエリで、レコードの無...
-
指定日付を起点にして最新日付...
-
【エクセル】指定した日付に一...
-
【Accessで困っています...
-
Accessで日付の比較がうまくい...
-
【vba】日付の形式が勝手に変わ...
-
前のレコードの合計に現レコー...
-
ACCESSの空白をカウントする
-
アクセス97のVBAで日付項目をヌ...
おすすめ情報