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
Vba 如何从Access中的对象获取准确的上次更新日期/时间?_Vba_Ms Access - Fatal编程技术网

Vba 如何从Access中的对象获取准确的上次更新日期/时间?

Vba 如何从Access中的对象获取准确的上次更新日期/时间?,vba,ms-access,Vba,Ms Access,我试图从Access对象检索上次更新的日期,有时它会返回DateCreated值 我在查询MSysObjects时看到了相同的结果: 或者使用即时窗口中的DAO: ??CurrentDb.ContainerForms.DocumentsForm\u POC\u Assignment\u Override.LastUpdate 如果选择查看方式|详细信息,则导航窗格中将显示正确的日期 并显示在“对象属性”对话框中: 我正在使用Access 2016 Office 365,32位。在做研究时,在写这

我试图从Access对象检索上次更新的日期,有时它会返回DateCreated值

我在查询MSysObjects时看到了相同的结果:

或者使用即时窗口中的DAO:

??CurrentDb.ContainerForms.DocumentsForm\u POC\u Assignment\u Override.LastUpdate

如果选择查看方式|详细信息,则导航窗格中将显示正确的日期

并显示在“对象属性”对话框中:


我正在使用Access 2016 Office 365,32位。

在做研究时,在写这个问题时,我发现这是一个很久以前的已知错误,至少是Access 2007

虽然令人失望的是微软还没有修复它,但有另一种方法可以获得准确的信息

以下是一个函数,该函数将检索除模块外的正确信息:

公共函数fGetObject ModifiedDataObject_名称为字符串,Object_类型为整数为变量 '获取传递对象的正确修改日期。MSysObjects和DAO对于所有对象类型都不精确。 根据Philipp Stiefel的提示 '使用这行代码获取最后修改的日期确实会返回不正确的结果。 ' ? CurrentDb.ContainerForms.DocumentsForm1.LastUpdate ' “但是,这不是我们用来接收上次修改日期的方法,除了查询,上面的行工作正常。 “我们使用的是: ' ? CurrentProject.AllFormsForm1.DateModified 选择案例对象类型 案例5“查询 fGetObject ModifiedDate=CurrentDb.QueryDefsObject\u Name.LastUpdated 案例-32768'表格 fGetObject ModifiedDate=CurrentProject.AllFormsObject\u Name.DateModified 'fGetObject ModifiedDate=CurrentDb.ContainerForms.DocumentsObject\u Name.LastUpdate 案件-32764'报告 fGetObject ModifiedDate=CurrentProject.AllReportsObject\u Name.DateModified 案例-32766'宏 fGetObject ModifiedDate=CurrentProject.AllMacrosObject\u Name.DateModified 外壳-32761'模块 '这将报告上次保存*ANY*模块的日期。 'CurrentDb.Containers方法和MSysObjects将报告创建日期。 fGetObject ModifiedDate=CurrentProject.AllModulesObject\u Name.DateModified 其他情况 “什么也不做。返回Null。 结束选择 端函数 如果您想在SQL中调用此函数,我建议您在选择所有对象之前进行筛选,否则会很慢

选择MSysObjects.Name, 开关[Type]=5,'Query',[Type]=-32768,'Form',[Type]=-32764,'Report',[Type]=-32766,'Macro',[Type]=-32761,'Module'作为[对象类型], MSysObjects.DateUpdate, fGetObjectModifiedDate[名称],[类型]为DateModified 来自MSysObjects 其中MSysObjects.Name如frm_POC_Assign* 左$[Name]、1'~'和MSysObjects。键入5、-32768、-32764、-32766、-32761 按MSysObjects.Name排序
在写下这个问题的同时进行研究,我发现这是一个很久以前的已知错误,至少在Access 2007

虽然令人失望的是微软还没有修复它,但有另一种方法可以获得准确的信息

以下是一个函数,该函数将检索除模块外的正确信息:

作为整型对象变量的字符串函数 '获取传递对象的正确修改日期。MSysObjects和DAO对于所有对象类型都不精确。 根据Philipp Stiefel的提示 '使用这行代码获取最后修改的日期确实会返回不正确的结果。 ' ? CurrentDb.ContainerForms.DocumentsForm1.LastUpdate ' “但是,这不是我们用来接收上次修改日期的方法,除了查询,上面的行工作正常。 “我们使用的是: ' ? CurrentProject.AllFormsForm1.DateModified 选择案例对象类型 案例5“查询 fGetObject ModifiedDate=CurrentDb.QueryDefsObject\u Name.LastUpdated 案例-32768'表格 fGetObject ModifiedDate=CurrentProject.AllFormsObject\u Name.DateModified 'fGetObject ModifiedDate=CurrentDb.ContainerForms.DocumentsObject\u Name.LastUpdate 案件-32764'报告 fGetObject ModifiedDate=CurrentProject.AllReportsObject\u Name.DateModified 案例-32766'宏 fGetObject ModifiedDate=CurrentProject.AllMacrosObject\u Name.DateModified 外壳-32761'模块 '这将报告上次保存*ANY*模块的日期。 'CurrentDb.Containers方法和MSysObjects将报告创建日期。 fGetObject ModifiedDate=CurrentProject.AllModulesObject\u Name.DateModified 其他情况 “什么也不做。返回Null。 结束选择 端函数 如果您想在SQL中调用此函数,我建议您在选择所有对象之前进行筛选,否则会很慢< /p> 选择MSysObjects.Name, 开关[Type]=5,'Query',[Type]=-32768,'Form',[Type]=-32764,'Report',[Type]=-32766,'Macro',[Type]=-32761,'Module'作为[对象类型], MSysObjects.DateUpdate, fGetObjectModifiedDate[名称],[类型]为DateModified 来自MSysObjects 其中MSysObjects.Name如frm_POC_Assign* 左$[Name]、1'~'和MSysObjects。键入5、-32768、-32764、-32766、-32761 按MSysObjects.Name排序
嗯,这只是对这个话题的另一个小评论。Access是一个很好的多用户应用程序,但并没有真正努力成为一个多开发人员管理工作室。。。。这是您需要为固定对象设计更改设置时间戳的唯一原因

在大多数情况下,人们肯定不希望用户更改对象,而compiled.accde就是发布的全部内容,所以他们没有这种能力


如果用户群有能力设计自己的查询,通常最好为此专门设置一个单独的前端,并将其排除在主应用程序的对象导航窗格之外。

好吧,这只是对该主题的另一个小评论。Access是一个很好的多用户应用程序,但并没有真正努力成为一个多开发人员管理工作室。。。。这是您需要为固定对象设计更改设置时间戳的唯一原因

在大多数情况下,人们肯定不希望用户更改对象,而compiled.accde就是发布的全部内容,所以他们没有这种能力


如果用户群有能力设计自己的查询-通常最好为此专门设置一个单独的前端,并将其排除在主应用程序的对象导航窗格之外。

请记住,保存任何独立代码模块将导致所有代码模块的所有更新状态变得相同。除此之外,这里有一个很好的解决方案。请记住,保存任何独立的代码模块将导致所有代码模块的所有更新状态都相同。除此之外,这里有一个很好的解决方案。你为什么需要这些信息?在极少数情况下,我会按修改的日期对db对象进行排序,以找到一个,但我不知道还有什么可以使用。第一个原因是为了提供一个我很久没有接触过的数据库的支持。按日期对对象进行排序很有帮助,因为通常最新日期的对象是我需要关注的对象。这个日期帮助我找到与之相关的档案和电子邮件。第二个原因是我已经构建了一些Access插件作为开发工具。我支持自2000年以来开发的Access应用程序,这些应用程序使用各种版本的标准表单和代码模块进行部署。查看修改日期有助于查找该对象的最新版本。显示的日期错误令人沮丧。感谢您的回复,这解释了您的需求。你应该把这个问题加上去。你不能使用vcs导出帮助来解决问题,它显示日期。你为什么需要这些信息?在极少数情况下,我会按修改的日期对db对象进行排序,以找到一个,但我不知道还有什么可以使用。第一个原因是为了提供一个我很久没有接触过的数据库的支持。按日期对对象进行排序很有帮助,因为通常最新日期的对象是我需要关注的对象。这个日期帮助我找到与之相关的档案和电子邮件。第二个原因是我已经构建了一些Access插件作为开发工具。我支持自2000年以来开发的Access应用程序,这些应用程序使用各种版本的标准表单和代码模块进行部署。查看修改日期有助于查找该对象的最新版本。显示的日期错误令人沮丧。感谢您的回复,这解释了您的需求。你应该把这个问题加上去。您不能使用vcs导出帮助解决问题,该帮助显示日期。像这样的评论应该作为评论输入,而不是作为答案发布。像这样的评论应该作为评论输入,而不是作为答案发布。
SELECT MSysObjects.Name, 
    Switch([Type]=5,'Query',[Type]=-32768,'Form',[Type]=-32764,'Report',[Type]=-32766,'Macro',[Type]=-32761,'Module') AS ObjectType, 
    MSysObjects.DateUpdate 
FROM MSysObjects
WHERE (((Left$([Name],1))<>'~') AND ((MSysObjects.Type) In (5,-32768,-32764,-32766,-32761)))
ORDER BY MSysObjects.DateUpdate DESC;