DateCreated故障?如何识别是否覆盖

时间:2015-05-28 20:24:00

标签: vba ms-access vbscript filesystemobject

作为自动更新宏的一部分,我在本地驱动器上有一个Access FrontEnd的副本,当打开时,检查服务器上的文件是否有更新的CreatedDate。如果它更新,我的代码当前使用fileSystemObject到CopyFile并覆盖本地驱动器版本(文件名保持不变)。

然而,我遇到的问题是,当这样做时,创建了'日期'不会更改为新文件的那个,因此在旧文件关闭和新文件打开时不断循环 - 根据创建的日期检查更新...我甚至尝试在本地文件上使用kill并等待10秒钟执行Copyfile命令,但即使这样,它也会显示已删除文件的创建日期。

当我回到办公室时,我将尝试将文件从服务器复制到本地驱动器而不重命名,删除原始本地驱动器文件,然后复制新创建的文件,以便我可以重命名返回原始名称(不应更改名称,以便任何快捷方式仍然有效)。

之前是否有人遇到此问题并找到解决方案?我错过了一些可以刷新的东西吗?创建的文件日期?

修改 我认为这与我所拥有的非常接近。

Dim strSource As String, strDest As String, strOrigDB As String, strSvrDB As String
Dim varOldDB As Variant, varNewDB As Variant, fso As Object

Set fso = CreateObject("scripting.filesystemobject")

strSource = "\\192.168.1.2\Data\svrDatabase"
strSvrDB = "AnyOldName.mde" 
strDest = "C:\myFolder\myDatabase"
strOrigDB = "KeepMyName.mde"

varOldDB = (strDest & "\" & strOrigDB)
varNewDB = (strSource & "\" & strSvrDB)
If fso.getfile(varOldDB).DateCreated < fso.getfile(varNewDB).DateCreated Then
    Kill strDest & "\" & strOrigDB
    Excel.Application.Wait Now() + TimeValue("00:00:05")
    fso.copyfile (strSource & "\" & strSvrDB), (strDest & "\" & strOrigDB), True
    'open new database version
    ShellExecute 0, "Open", (strDest & "\" & strOrigDB), "", "", 1
    DoCmd.Quit
End If

我最初使用的是日期修改,但注意到只要前端打开,这将会更新,因此总是比服务器文件更新的日期值。

修改 考虑到这一点,并希望我的逻辑没有彻底崩溃,最好是我有一个用户点击的快捷方式,但它不是打开前端,而是打开一个脚本文件,检查一个更新。如果有更新,则删除本地前端并将服务器1(应该与原始文件命名不同)复制到本地文件夹 - 然后打开新的前端。

这意味着正在检查的datecreated将始终在副本上更新到本地文件夹,并且kill将起作用,因为该文件尚未打开。我仍然有点谨慎使用lastdatemodified,用户在创建更新时打开数据库 - 前端包含搜索中使用的表格,我相信这些表格会改变前端的修改日期。在这种情况下,修改的本地日期仍将大于服务器上的新前端。

1 个答案:

答案 0 :(得分:1)

您应该使用修改日期。那是文件上次更改的时间。

这有助于说明时间。

  

时间戳因各种原因而在不同时间更新。关于文件时间戳的唯一保证是,当关闭进行更改的句柄时,文件时间会正确反映。

因此,在比较时间之前,请尝试关闭所有文件。

同样来自https://support.microsoft.com/en-us/kb/172190

  

当从目录中删除名称(重命名或删除)时,其短/长名称对和创建时间将保存在缓存中,并由删除的名称键入。将名称添加到目录(重命名或创建)时,将搜索缓存以查看是否有要还原的信息。缓存对目录的每个实例都有效。如果删除目录,则会删除其缓存。

同样来自不受信任的来源也会改变最后一次修改。

还有复制与移动的规则。

此外,文件需要在Windows eco系统中使用,才能确保应用Windows规则。