我正在使用下面的表单,不确定我是否可以实现此逻辑:
Start Date = Now();
If Expedited then Exp_Date = Start_Date + 72 hours
else Exp_Date = Start_Date + 30 days.
我使用此表达式作为默认值,但在评估时看起来它非常关心ExpeditedYN中的值。
=IIf([ExpYN]=True,DateAdd("h",72,Now()),DateAdd("d",30,Date()))
理想情况下,我想翻转Exp.Date默认点击Expedited框,这在VB中是否可用。试过DLookUp(D - >动态??)并且它不起作用
DLookUp(IIf([ExpYN]=True,DateAdd("h",72,Now()),DateAdd("d",30,Date())))
答案 0 :(得分:1)
使用IIf
或DLookup
引用默认值中同一记录中的另一个字段不会让你到任何地方,因为Access只询问默认值当填写时要填写什么值新记录首先发起。这意味着它将基于其他字段的默认值,因此不会响应任何用户输入。
我建议您将StartDate
和DeadlineDate
的默认值设置为简单,类似于您现有的情况:
StartDate
的默认值:Now()
DeadlineDate
的默认值:DateAdd("d",30,Now())
然后在更改Expedited时更改代码。有几种方法可以做到这一点,我可能会把它放在复选框的Before Update事件中,所以它运行时无需移出记录。如果您希望以后能够更改记录,也可以将其基于StartDate字段。您可以使用Access的宏构建器构建它,但是在这里更容易向您展示VBA:
If ExpYN Then
DeadlineDate = DateAdd("h", 72, StartDate)
Else
DeadlineDate = DateAdd("d", 30, StartDate)
End If
如果您希望探测过程基于单击按钮的时刻而不是StartDate
中的DateTime数据,只需将StartDate
(或任何该字段被调用)更改为{{1 }}
答案 1 :(得分:0)
DefaultValue仅触发一次 - 当记录首次通过输入任何字段启动时。如果计算基于Expedited的值,则DLookup不应该起作用,因为记录尚未提交到表。记录在以下情况下提交:1。关闭表/查询/表单或2.移动到另一个记录或3.运行代码保存。如果要以编程方式修改基于加速值的DeadlineDate值,则代码需要处于Expedited AfterUpdate事件中并放弃DefaultValue方法。
Me!DeadlineDate = IIf(Me!ExpYN, DateAdd("h",72,Now()), DateAdd("d",30,Now()))