アプリ版:「スタンプのみでお礼する」機能のリリースについて

ACCESS2002です。
本日日付が規定値入力されるフォームがあります。基となっているテーブルの「日付」フィールドには主キーが設定されていて、同一日のデータを入力してもレコードとして保存されないようになっています。

しかし、保存の有無がテーブルを直接見ないと判断できないため、システムとしては大変不便です。

そこで、すでに同一日のレコードが存在する場合は、入力終了のボタンを押した時にでも、「すでに同一日での入力があります。このデータは保存されません。」といったメッセージが表示されるようにしたいんですが、どのようにすべきなのかが判りません。
皆さんの知恵をお貸し下さい。

A 回答 (4件)

こんにちは。

maruru01です。

こんな感じかな。


If DCount("日付", "テーブル名", "日付 = #" & Me!日付.Value & "#") > 0 Then
  MsgBox "すでに同一日での入力があります。このデータは保存されません。"
  Cancel = True
  Exit Sub
End If

DCount関数は、テーブルのある条件のレコード数をカウントする関数です。

この回答への補足

さっそくの回答ありがとうございます。
書かれてある通り記述してみましたが、Cancel=Trueのところで「変数が定義されていません。」ってエラーになりました。
これはどんな定義をすればいいんでしょうか?

そのあたりの知識があまりないんですが、よろしくお願いします。

補足日時:2003/10/20 13:11
    • good
    • 0

テーブル内の同一のデータの入力をさけるために、入力されたデータをテーブル内の検索にかけて、同じものがあるかを判断して、せっかく入力しても、保存されない。



効率的ではありませんね。毎回保存するたびに数万件あるテーブルをいちいち検索して保存するかどうか決めるわけですから。

それより、入力されたデータはすべて受け付けて、二重、三重入力されたレコードを探し、削除するような、メンテナンスをしたほうが、いいと思いますけど。

入力ミスが頻繁に起きるとすれば、業務事態を見直す。
年数回しか起きない入力ミスのために、毎回システムに負荷をかける。どっちがいいんでしょう。

これは、考え方の問題ですから、システム業務全体の見直しをおすすめします。

この回答への補足

さっそくの回答ありがとうございます。

拙い知識で作っているシステムなので、大したものではないんです。せいぜい200~300件程度のデータしか管理しないものですし、1日1回入力があるかどうか・・・っていうものなんです。

チェックをかけるとしても、そのテーブルの最終データとチェックすればいいだけなので、大した負荷にもならないかなと安易に考えました。
お話にあった効率的な方法もどうすればいいのかすぐには思いつきませんし・・・。

確かにおっしゃる通り、あんまり発生しない入力ミスのためにシステムに負荷をかけるのは得策じゃありませんね。

補足日時:2003/10/20 13:13
    • good
    • 0

>Cancel=Trueのところで「変数が定義されていません。

」ってエラーになりました。
Cancelは、BeforeUpdateイベントプロシージャなどに、最初から用意されている引数です。
フォームのBeforeUpdateに記述すればそのまま使用出来ます。
別の場所(終了ボタンのクリックイベントなど)に記述する場合は、
Cancel = True
の変わりに、保存をキャンセルする処理を記述して下さい。
    • good
    • 0
この回答へのお礼

再度回答くださってありがとうございます。
うまくできました。

お礼が遅くなってしまって本当にすみません。

お礼日時:2003/10/22 12:09

' こんな感じでどうですか?


' 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
    • good
    • 0
この回答へのお礼

回答ありがとうございます。
お礼が遅くなって、本当にすみません。
maruru01さんの方法で動きました。

でも、oshiete_kunさんのお返事は別のシステムで活用できる気がするので、参考にさせていただきます。
ありがとうございました。

お礼日時:2003/10/22 12:11

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!