Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/vba/15.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ms access 表字段默认属性值函数在Microsoft Access 2010中不再工作_Ms Access_Vba_Ms Access 2010 - Fatal编程技术网

Ms access 表字段默认属性值函数在Microsoft Access 2010中不再工作

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

我使用下面的代码创建表,并将两个字段的默认属性值设置为函数。这些函数将默认值设置为输入记录时的用户和日期时间。一种非常简单的跟踪数据输入时间和输入者的方法

显然,Microsoft ACCESS 2010不再允许将函数用作字段默认值。是否有一些简单的设置我可能会错过

我理解直接从代码中传递这些值的参数,并且可以操纵environ函数。使用此代码的过程不够关键,不足以保证这种关注

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
一丝不苟。旧习惯。。。。