0

我认为我有前进的方向,但需要就我想做的最佳方法提供指导:

MS Access 2007 数据库

我有 2 个表,为此我创建了 2 个用户输入表单。

表格 1. 站点位置:此表格中关注的字段是:找到站点的日期(使用日期数据类型)

表格 2. 站点详细信息:表格中关注的字段是:工作日期开始(使用日期数据类型)

这个问题是我正在尝试创建一个表单以形成定义以下内容的验证规则:

工作日期开始必须 >= 比找到的日期站点。

我尝试了各种验证规则,所有这些规则都不起作用,例如:

[工作开始日期]>=[找到站点的日期]

=[工作地点]![找到网站的日期]

我开始工作的一条规则要求两种表格都打开,但我不希望那样。

但是,这是解决方案吗:

willir (MIS) post re: 使用 <=Dlookup 的两个表单验证

或者是在更新事件之前/之后编写代码的最佳方式?还是有其他方法?

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

您的事件代码应如下所示。(我认为这应该在 [work start date] 控件的 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 回答