我想在插入新记录时自动为用户提供默认值。对我来说,当用户希望开始将数据输入记录时,不仅在记录完成后,还应提供这些默认值。
此问题与Field default value from query in MS Access基本相同,只是默认值基于另一个表,而在这种情况下,我希望根据最后创建的记录填写默认值,这不是'用户7116在他的评论中指出。
(澄清:那里提到的方法,使用表单控件的默认值,最初工作。问题是当用户弄脏新记录时,访问已经设置了下一个,未来,新记录的默认值。问题在于,此时第一个新记录尚未存在,因此默认值将基于此前的记录,因为这将是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
这样可以很好地工作,也就是说,除非用户删除表单上的最后一条记录,否则该记录无法成功删除记录。我的实验表明,即使在BeforeDelConfirm
事件之前,也会调用下一条记录的当前事件(在本例中为新记录)(尽管the documentation暗示Current
事件不会“在所有记录被删除之前发生”),我想编辑记录会阻止删除被执行。
我该如何解决这个问题?有没有办法从Current
事件中检测到它正在删除不同的记录,并且不应该中断它?
答案 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事件。
您不想使用当前事件,因为当用户只是浏览而不是编辑数据时会触发该事件。