0

私は前に進む道があると思いますが、私がやりたいことのための最良の方法についてのガイダンスが必要です:

MS Access 2007 データベース

2 つのユーザー入力フォームを作成した 2 つのテーブルがあります。

フォーム 1. サイトの場所: このフォーム内の対象フィールド: サイトが見つかった日付 (日付データ型を使用)

フォーム 2. サイトの詳細: フォーム内の対象フィールド: 勤務開始日 (日付データ型を使用)

この問題は、次を定義するフォームからフォームへの検証ルールを作成しようとしています。

勤務開始日は、サイトが見つかった日付よりも大きくなければなりません。

次のようなさまざまな検証ルールを試しましたが、すべて機能しません。

[勤務開始日]>=[サイト発見日]

=[勤務地]![サイト発見日]

私が機能するようになった 1 つのルールでは、両方のフォームを開く必要がありましたが、それは望んでいませんでした。

しかし、これは解決策ですか:

willir (MIS) post re: <=Dlookup を使用した 2 つのフォーム検証

または、更新イベントの前後にコードを記述する最良の方法はありますか? それとも別の方法がありますか?

4

1 に答える 1

1

最も簡単な方法は、別の形式の値ではなく、テーブル内の値を確認することです。DLookup()を使用すると、別のテーブルにある値を参照できます。

あなたの場合、テーブルの名前が「サイトの場所」の場合、DLookup() 自体は次のようになります。

DLookup("[Date Site Found]", "[Site Location]", "Your WHERE clause goes here")

テーブル、列、およびキーを指定して、SQL データベースのデータにアクセスします。WHERE 句がキーを提供します。あなたの説明からそれがどのように見えるべきかを伝える方法はありませんが、私は推測します.

'Using a literal number. Only useful for testing.
DLookup("[Date Site Found]", "[Site Location]", "[Site ID] = 32")

'Referring to another control on the same form.
DLookup("[Date Site Found]", "[Site Location]", "[Site ID] = Form![Site ID"])

リンクされた記事は、それぞれが同じ結果を返す WHERE 句のいくつかのバリエーションを示しています。この種の WHERE 句には、 whereという単語は含まれません。それは多くの人をつまずかせます。

DLookup の使用

イベント コードは次のようになります。(これは[作業開始日]コントロールのBeforeUpdateイベントにあると思います。)

Dim date_found as Date
date_found = DLookup("[Date Site Found]", "[Site Location]", "[Site ID] = Form![Site ID"])
If ([work date start] >= date_found) Then
    'Good. Do nothing.
Else
    'Bad [work start date]. Throw the user a dialog box, and cancel this event.
    'Left as an exercise for the OP.
End If
于 2012-10-14T19:23:44.293 に答える