在当前事件中初始化记录默认值
Posted
技术标签:
【中文标题】在当前事件中初始化记录默认值【英文标题】:Initializing record default values in a Current event 【发布时间】:2016-05-04 13:22:31 【问题描述】:我想在插入新记录时自动为用户提供默认值。对我来说重要的是,当用户希望开始将数据输入到记录中时,应该提供这些默认值,而不仅仅是在记录完成之后。
这个问题与Field default value from query in MS Access基本相同,只是默认值是基于另一个表的,而在这种情况下,我希望根据上次创建的记录填写默认值,这不起作用正如 user7116 在他的评论中指出的那样。
(澄清:那里提到的方法,使用表单控件的默认值,最初确实有效。问题是当用户弄脏新记录时,访问已经为下一个,未来的新记录设置了默认值。问题是,此时第一个新记录还不存在,因此默认值将基于之前的记录,因为那将是 Dlookup
和 DMax
将看到的。)
我尝试使用表单的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
这很好用,也就是说,除非用户删除表单上的最后一条记录,否则删除记录没有成功。我的实验表明,下一条记录的 Current 事件(在本例中是一条新记录)甚至在 BeforeDelConfirm
事件之前被调用(尽管 the documentation 暗示 Current
事件没有“直到所有记录都被删除”),我想编辑记录会阻止删除被执行。
我应该如何解决这个问题?有没有办法从Current
事件中检测到它正在删除不同的记录,并且不应该中断它?
【问题讨论】:
【参考方案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
【讨论】:
【参考方案2】:您是只为新记录运行此类代码和设置,还是希望在用户编辑现有记录时运行此类代码?
你遗漏了一个巨大的细节。
如果您只希望此类代码用于新记录,那么您的代码应放在表单前插入事件中。此事件仅在添加新记录时触发(因此,如果用户转到新记录,但不执行任何操作且不键入,则他们可以退出表单,或导航离开,并且不会创建或添加一些空白记录。
如果您希望此类代码运行并为已存在的记录设置值,则将上述代码从插入前移动到表单上的脏事件。
您不想使用 on-current 事件,因为它会在用户只是浏览而不是编辑数据时触发。
【讨论】:
我正在使用当前事件,因为我想要在用户进入新记录时使用它。我使用了NewRecord
属性来确保它只有在它实际上是新记录时才会发生,而不仅仅是浏览。以上是关于在当前事件中初始化记录默认值的主要内容,如果未能解决你的问题,请参考以下文章