作爲自動更新宏的一部分,我在本地驅動器上有一個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有點小心,當創建更新時用戶將數據庫打開 - 前端包含用於搜索的表格,我相信這些表格會改變前端的修改日期。在這種情況下,修改的本地日期仍然會大於服務器上的新前端。
很難在沒有看到您現有的代碼的情況下提出任何建議。 –
我同意蒂姆威廉姆斯。另外,你確定你的副本是否成功?聽起來好像它可能會悄然失敗。並且正在執行復制的代碼不在數據庫中嗎? – ChipsLetten
對不起,現在在家裏,代碼在我的工作電腦上。我會看看我是否可以記住它併發布它。複製絕對成功 - 我甚至在文件夾打開的情況下跨過了代碼。文件被刪除,暫停,複製文件放入新文件,但創建的日期來自刪除的文件,而不是新文件。執行復制的代碼是前端Autoexec的一部分 - 首先打開前端後運行。後端位於雲端,因此不會打開與此宏的連接。現在要弄些代碼 - 我認爲這將是一個已知的問題。 – Glib