Ms access Can';t使用新记录在Access窗体中设置字段值

Ms access Can';t使用新记录在Access窗体中设置字段值,ms-access,vba,Ms Access,Vba,当我打开access form ActivityTracker以查看新记录时,我希望它自动使用当前时间()填充字段*开始时间* 这会抛出一个错误“您无法为此对象分配值”,并停止执行 我可以通过显式地转到新记录来修复错误 Private Sub Form_Open(Cancel As Integer) If IsNull(Form_ActivityEntry.Start_time) And IsNull(Form_ActivityEntry.id) Then DoCmd.R

当我打开access form ActivityTracker以查看新记录时,我希望它自动使用当前时间()填充字段*开始时间*

这会抛出一个错误“您无法为此对象分配值”,并停止执行

我可以通过显式地转到新记录来修复错误

Private Sub Form_Open(Cancel As Integer)
    If IsNull(Form_ActivityEntry.Start_time) And IsNull(Form_ActivityEntry.id) Then
        DoCmd.RunCommand acCmdRecordsGoToNew
        Form_ActivityEntry.Start_time = Now()
    End If
End Sub
或者

Private Sub Form_Open(Cancel As Integer)
    If IsNull(Form_ActivityEntry.Start_time) And IsNull(Form_ActivityEntry.id) Then
        Me.Recordset.AddNew
        Form_ActivityEntry.Start_time = Now()
    End If
End Sub
但这两种情况都会导致弹出警告:“您无法转到指定的记录。”

我试着用这个来抑制警告

    DoCmd.SetWarnings False
    DoCmd.RunCommand acCmdRecordsGoToNew
    DoCmd.SetWarnings True
或者通过设置错误处理

    On Error GoTo Err_SomeName
但我还是得到了警告

AllowAdditions设置为True。记录集类型为动态集

否则,使用此表单一切正常

我做错了什么?是否有一个叫做“打开新记录”而不是“打开表格”的活动


谢谢你的帮助

我建议您将控件的默认值设置为Now()或Date()。默认值仅适用于新记录,完成任何其他字段后,将分配该值

在这种特殊情况下,甚至还有一个参数用于设置表中字段的默认值


请不要使用设置警告:

我不喜欢移动到表单上的新记录。可能会出现太多的数据漏洞,您会遇到类似您的问题

我推荐了一个空白的,未绑定的表单,带有一个文本框,日历控制,数字向上向下。。。对于要添加的每个字段,请执行等操作。通过这种方式,您可以键入check(检查)每个字段,或者根据需要执行其他检查。然后,当用户满意时,使用insert查询添加记录


然而,对于你提出的问题。看起来您正在尝试为绑定字段赋值。尝试将值分配给字段绑定到的对象。

这里的问题仍然是没有人正确回答为什么发布的代码不起作用

原因是您正在使用on open事件

与.net和大多数系统不同,access有一个很好的设计,当您打开一个表单事件(可以取消)和一个加载事件时,会发生两个事件

这种伟大的访问设计意味着测试条件和防止表单加载的代码可以放置在打开事件中。如果你仔细看,你会发现打开的甚至有一个取消。如果设置cancel=true,则表单将不会加载,也不会显示

因此,您可以不测试任何数据,也可以测试用户权限或其他内容,而huts会取消表单加载。如果可以取消表单加载,那么允许修改绑定控件的值就没有什么意义了,因为所有绑定控件都是只读的

不允许在打开事件中更改绑定控件的值。这太快了,这是由产品的设计和意图决定的

因此,防止表单加载的条件测试是开放的

因此,这表明变量设置、控件设置、控件设置值和基本表单启动代码属于ON-LOAD事件。现在开张还为时过早

当然,如果您的代码要取消表单加载,那么所有表单启动和设置代码都不应该也不需要运行是合乎逻辑的

总之

公开赛:

可以设置取消=真 如果您希望防止表单加载并被用户看到,那么代码将在此处进行测试

加载事件:

所有的启动代码、变量设置、控件设置等现在都是推荐的并且是可能的

Access中的这种简单设计还意味着,作为一名开发人员,您现在知道在哪里可以找到阻止和取消表单加载的代码。当然,如果没有对差异的基本理解以及Access中存在两个事件的原因,那么海报和给出的答案之间的混淆就变得显而易见了。

正如荷马所说,“噢!”这太明显了。:-)我在创建表单时考虑过这一点,但选择不这样做,因为我想让它由用户发起。
    On Error GoTo Err_SomeName