在当前事件中初始化记录默认值

Posted

技术标签:

【中文标题】在当前事件中初始化记录默认值【英文标题】:Initializing record default values in a Current event 【发布时间】:2016-05-04 13:22:31 【问题描述】:

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

这个问题与Field default value from query in MS Access基本相同,只是默认值是基于另一个表的,而在这种情况下,我希望根据上次创建的记录填写默认值,这不起作用正如 user7116 在他的评论中指出的那样。

(澄清:那里提到的方法,使用表单控件的默认值,最初确实有效。问题是当用户弄脏新记录时,访问已经为下一个,未来的新记录设置了默认值。问题是,此时第一个新记录还不存在,因此默认值将基于之前的记录,因为那将是 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

这很好用,也就是说,除非用户删除表单上的最后一条记录,否则删除记录没有成功。我的实验表明,下一条记录的 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 属性来确保它只有在它实际上是新记录时才会发生,而不仅仅是浏览。

以上是关于在当前事件中初始化记录默认值的主要内容,如果未能解决你的问题,请参考以下文章

在页面初始化时候 jquery easyui datebox 怎么设置默认值为当前系统日期

可选参数的默认值必须是常量

在Oracle中将默认值设置为当前用户

Yii2 - 仅当记录是新的时才使用默认值

MySQL数据类型 - 日期和时间类型

在 CSS 和 Jquery 中将颜色更改回默认值 [重复]