在Current事件

时间:2016-05-04 13:22:32

标签: forms ms-access events

我想在插入新记录时自动为用户提供默认值。对我来说,当用户希望开始将数据输入记录时,不仅在记录完成后,还应提供这些默认值。

此问题与Field default value from query in MS Access基本相同,只是默认值基于另一个表,而在这种情况下,我希望根据最后创建的记录填写默认值,这不是'用户7116在他的评论中指出。

(澄清:那里提到的方法,使用表单控件的默认值,最初工作。问题是当用户弄脏新记录时,访问已经设置了下一个,未来,新记录的默认值。问题在于,此时第一个新记录尚未存在,因此默认值将基于此前的记录,因为这将是DlookupDMax将看到的内容。 )

我尝试使用表单的Current事件来初始化默认值:

Private Sub Form_Current()
    If Form.NewRecord Then
        Clinic = DLookup("Clinic", "Invoices", "InvoiceID = " & DMax("InvoiceID", "Invoices")) 'Default to the same clinic as the last record
        [Tax receipt number] = DMax("[Tax receipt number]", "Invoices") + 1 'Basically autonumber, but editable
    End If
End Sub

这样可以很好地工作,也就是说,除非用户删除表单上的最后一条记录,否则该记录无法成功删除记录。我的实验表明,即使在BeforeDelConfirm事件之前,也会调用下一条记录的当前事件(在本例中为新记录)(尽管the documentation暗示Current事件不会“在所有记录被删除之前发生”),我想编辑记录会阻止删除被执行。

我该如何解决这个问题?有没有办法从Current事件中检测到它正在删除不同的记录,并且不应该中断它?

2 个答案:

答案 0 :(得分:1)

你可以"反转"过程:

Private Sub Form_AfterUpdate()
    Clinic.DefaultValue = DLookup("Clinic", "Invoices", "InvoiceID = " & DMax("InvoiceID", "Invoices")) 
    [Tax receipt number].DefaultValue = DMax("[Tax receipt number]", "Invoices") + 1 
End Sub

答案 1 :(得分:0)

您是否只为新记录运行此类代码和设置,或者您是否希望在用户编辑现有记录时运行此类代码?

你遗漏了一个巨大的细节。

如果您只想要这些代码用于新记录,那么您的代码应放在表单插入前事件中。此事件仅在添加新记录时触发(因此,如果用户转到新记录,但不执行任何操作且未键入,则可以退出表单,或导航离开,并且不会创建或添加一些空白记录。< / p>

如果您希望此类代码为已有记录运行和设置值,请将上述代码从before-insert移到窗体on-dirty事件。

您不想使用当前事件,因为当用户只是浏览而不是编辑数据时会触发该事件。