2012-10-14 41 views
0

我想我有前進的方向,但需要我願意做的最好的方法指導:MS Access 2007年到窗體數據驗證(數據類型:日期)

MS Access 2007數據庫

我有2個表格,我已經創建了2個用戶輸入表單。

表單1. 站點位置:此表中關注的領域是: 日期網站上發現(利用日期數據類型)

形式2 網站詳情:形式內的關注的領域是: 工作日期開始(使用日期型數據)

這個問題我想創建一個表單,形成定義以下驗證規則:

工作日期開始必須> =比發現日期網站。

我曾嘗試過各種驗證規則所有這些不工作,如:

[工作日期開始]> = [日期網站上發現]

= [工作地點] [日期網站!找到]

我上班的一條規則要求兩種形式都是開放式的,但我不想這樣做。

但是這是解決方案:

willir (MIS) post re: Two form validation using <=Dlookup

還是處於前/寫代碼更新事件之後的最佳方式是什麼? 還是有另一種方式?

回答

1

最簡單的方法是查看錶格中的值,而不是另一種形式的值。 DLookup()可讓您查看另一個表中的值。

就你而言,如果你的表名爲「Site location」,那麼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子句不包括字其中。這讓很多人絆倒了。

使用使用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 
+0

謝謝Dlookup的工作原理,將代碼添加到Private Sub BeforeUpdate事件中。修改並修改了上述示例代碼以適應我的要求。這種方法要比擁有一個非常長的驗證規則要好得多,這個規則要求兩個表單都是開放的。現在我可以根據自己的喜好格式化日期和日期輸入。乾杯 – user1655231