Ms access 表字段默认属性值函数在Microsoft Access 2010中不再工作
我使用下面的代码创建表,并将两个字段的默认属性值设置为函数。这些函数将默认值设置为输入记录时的用户和日期时间。一种非常简单的跟踪数据输入时间和输入者的方法 显然,Microsoft ACCESS 2010不再允许将函数用作字段默认值。是否有一些简单的设置我可能会错过 我理解直接从代码中传递这些值的参数,并且可以操纵environ函数。使用此代码的过程不够关键,不足以保证这种关注Ms access 表字段默认属性值函数在Microsoft Access 2010中不再工作,ms-access,vba,ms-access-2010,Ms Access,Vba,Ms Access 2010,我使用下面的代码创建表,并将两个字段的默认属性值设置为函数。这些函数将默认值设置为输入记录时的用户和日期时间。一种非常简单的跟踪数据输入时间和输入者的方法 显然,Microsoft ACCESS 2010不再允许将函数用作字段默认值。是否有一些简单的设置我可能会错过 我理解直接从代码中传递这些值的参数,并且可以操纵environ函数。使用此代码的过程不够关键,不足以保证这种关注 CurrentDb.Execute "CREATE TABLE Table(ActivityYearMonth DOU
CurrentDb.Execute "CREATE TABLE Table(ActivityYearMonth DOUBLE, UserName TEXT, UserID TEXT, UpdatedOn DATE, UpdatedBy text)"
CurrentDb.TableDefs("Table").Fields("UpdatedOn").Properties("DefaultValue") = "=Now()"
CurrentDb.TableDefs("Table").Fields("UpdatedBy").Properties("DefaultValue") = "=Environ(""UserName"")"
Access允许某些函数作为字段默认值属性。但并非所有功能都可以接受
“=Now()”
应该可以工作。至少对我来说是这样
但是,“=Environ(““UserName”)”
触发错误3388,“验证表达式中的未知函数“Environ”或“Table.UpdatedBy”上的默认值。”
默认情况下,Environ
是沙盒的,因此访问限制了您在何处以及如何使用它。Environ
的任何变化都不会被接受为字段默认值
这并不是Access 2010的新发展。我在Access 2007中确认了相同的行为。由于您使用的是Access 2010,您可能可以使用事件驱动的数据宏来实现这一点。我只是尝试了一下,虽然不允许使用
=Environ(…)
,但我能够使用我创建为VBA函数的=GetUser()
选项比较数据库
选项显式
公共函数GetUser()
静态s作为字符串
将WshNet设置为对象的WshNet网络
如果Len(s)=0,则
将WshNet=CreateObject(“WScript.Network”)'设置为新的WshNetwork
s=WshNet.UserName
设置WshNet=Nothing
如果结束
GetUser=s
端函数
更改前的数据宏
如果[IsInsert]那么
设定场
名称更新
Value==Now()
设定场
名称更新人
Value==GetUser()
注意:当从Access本身添加记录时,这可以正常工作,但是GetUser()
调用可能会导致外部应用程序的插入失败,因此请小心操作。如果这些函数在此之前工作过,则问题可能是沙盒模式
通过在注册表\Software\Microsoft\Office\14.0\Access Connectivity Engine\Engines
中设置SandBoxMode=2
而不是3
来禁用sanbox模式和表达式应该可以工作。发生了什么问题?代码运行但未设置默认值?错误消息(哪一行?)考虑一个基于GetUser=CreateObject(“WScript.Network”).UserName的简单函数如果考虑后期绑定的性能,包含一个Static
变量来保存UserName
值,这样它就只需要在每个访问会话中调用CreateObject
一次。@HansUp很好的建议,谢谢。我已经修改了代码。在经历了VB6(及更早版本)内存泄漏的痛苦经历后,我仍然试图对setobjvar=Nothing
一丝不苟。旧习惯。。。。