2015-05-28 65 views
0

作爲自動更新宏的一部分,我在本地驅動器上有一個Access FrontEnd的副本,當它打開時,檢查服務器上的文件是否具有較新的CreatedDate。如果它較新,我的代碼當前使用fileSystemObject來CopyFile並覆蓋本地驅動器版本(文件名保持不變)。DateCreated小故障?如何識別是否覆蓋

但是,我遇到的問題是,當完成此操作時,'創建日期'不會更改爲新文件的日期,因此會不斷循環,因爲舊文件已關閉,並且新文件已打開 - 將檢查基於創建日期的更新...我甚至嘗試在本地文件上使用kill,並在執行Copyfile命令之前等待10秒,但即使如此,它也隨着刪除文件的創建日期出現。

當我回到辦公室時,我會嘗試將文件從服務器複製到本地驅動器,而無需重命名它,刪除原始本地驅動器文件,然後複製新創建的文件,以便重新命名它到原來的名字(名字不應該改變,以便任何快捷方式仍然可以工作)。

有沒有人遇到過這個,找到了解決辦法?我是否錯過了能夠「刷新」文件的創建日期的明顯內容?

編輯 我覺得這跟我所做的很接近。

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 

我最初使用修改日期,但注意到,一旦前端開業,這將得到更新,因此將始終比服務器文件更新的日期值。

編輯 後的思考過這個問題,希望我的邏輯還沒有完全打破,這將是最好的,如果我有一個快捷鍵供用戶點擊,但不是開放的前端,它會打開一個檢查更新的腳本文件。如果有更新,它會刪除本地前端,並將服務器(應該與原來的名稱不同)命名爲本地文件夾 - 然後打開新的前端。

這將意味着被檢查的日期總是要更新到本地文件夾的副本上,因爲該文件尚未打開,kill會生效。我仍然對使用lastdatemodified incase有點小心,當創建更新時用戶將數據庫打開 - 前端包含用於搜索的表格,我相信這些表格會改變前端的修改日期。在這種情況下,修改的本地日期仍然會大於服務器上的新前端。

+1

很難在沒有看到您現有的代碼的情況下提出任何建議。 –

+1

我同意蒂姆威廉姆斯。另外,你確定你的副本是否成功?聽起來好像它可能會悄然失敗。並且正在執行復制的代碼不在數據庫中嗎? – ChipsLetten

+0

對不起,現在在家裏,代碼在我的工作電腦上。我會看看我是否可以記住它併發布它。複製絕對成功 - 我甚至在文件夾打開的情況下跨過了代碼。文件被刪除,暫停,複製文件放入新文件,但創建的日期來自刪除的文件,而不是新文件。執行復制的代碼是前端Autoexec的一部分 - 首先打開前端後運行。後端位於雲端,因此不會打開與此宏的連接。現在要弄些代碼 - 我認爲這將是一個已知的問題。 – Glib

回答

1

您應該使用Date Modified。這是文件上次更改的時間。

這是什麼幫助說時間。

時間戳在各種時間和各種原因更新。關於文件時間戳的唯一保證是當更改的句柄關閉時文件時間正確地反映出來。

因此,請在比較時間之前關閉所有文件。

https://support.microsoft.com/en-us/kb/172190

當名稱從一個目錄(重命名或刪除),其短/長名稱對和創建時間除去被保存在一個高速緩存中,通過除去名稱作爲關鍵字。將名稱添加到目錄(重命名或創建)時,將搜索緩存以查看是否有要還原的信息。緩存對每個目錄實例都有效。如果一個目錄被刪除,它的緩存將被刪除。

來自不可信來源的應對將會改變最後修改的肯定。

此外還有複製與移動的規則。

另外文件需要在Windows生態系統窗口規則適用於肯定。

+0

我想我不應該運行代碼殺死一個文件,同時仍然在文件中。 ChipsLetten只是指出了。您發佈的緩存部分不會讓我感到興奮太多:)看起來可能有點難以解決。非常感謝您的回覆。 – Glib

相關問題