Как часть макроса автоматического обновления, у меня есть экземпляр Access FrontEnd на локальном диске, который при открытии проверяет, имеет ли файл на сервере новую функцию CreateDate. Если он новее, мой код в настоящее время использует fileSystemObject для CopyFile и перезаписывает версию локального диска (имя файла остается тем же).DateCreated glitch? Как идентифицировать, если переписывание
Проблема, с которой я столкнулась, заключается в том, что когда это делается, «дата создана» не изменяется в отношении нового файла и поэтому постоянно циклически меняется, когда старый файл закрыт, а новый открыт - который проверяет обновления, основанные на созданной дате ... Я даже пытался использовать kill в локальном файле и ждать 10 секунд перед выполнением команды Copyfile, но даже тогда он появляется с датой создания удаленного файла.
Когда я вернусь в офис, я попытаюсь скопировать файл с сервера на локальный диск, не переименовав его, удалив исходный файл локального диска, а затем скопировав вновь созданный файл, чтобы я мог переименовать его обратно к исходному имени (имя не должно изменяться, чтобы любые ярлыки все равно работали).
Кто-нибудь сталкивался с этим раньше и нашел решение? Я пропустил что-то очевидное, что бы «обновить» созданную дату файла?
EDIT Я думаю, что это очень близко к тому, что у меня было.
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
Я был первоначально используя дата изменения, но заметил, что как только передний конец открыт, это будет получить новый и поэтому всегда будет новая значение даты, чем файл сервера.
EDIT Подумав об этом, и надеясь, что моя логика не полностью разрушена, было бы лучше, если бы я был ярлык для пользователя щелкнуть, но вместо того, чтобы открыть Frontend, он открывает файл сценария, который проверяет наличие обновления. Если есть обновление, он удаляет локальный Frontend и копирует серверный (который должен быть назван по-разному оригиналу) в локальную папку - затем открывается новый интерфейс.
Это будет означать, что проверенная дата будет всегда обновляться при копировании в локальную папку, а kill будет работать, потому что файл не был открыт. Я все еще немного опасаюсь использовать lastdatemodified incase, когда пользователь открывает базу данных при создании обновления - Frontend содержит таблицы, используемые в поисках, которые, как я полагаю, изменят модифицированную дату Frontend. В этом случае изменение локальной даты будет по-прежнему больше, чем новый интерфейс на сервере.
Трудно делать какие-либо предложения, не видя существующего кода. –
Я согласен с Тимом Уильямсом. Кроме того, вы уверены, что ваша копия преуспевает? Похоже, это может быть просто неудачно. А код, который выполняет копирование, находится не в базе данных? – ChipsLetten
Извините, дома прямо сейчас, и код находится на моем рабочем компьютере. Я посмотрю, смогу ли я его запомнить и опубликовать. Копия, безусловно, преуспевает - я даже шагнул через код с открытой папкой. Файл удаляется, приостанавливается, copyfile помещает новый файл, но дата создаётся из удаленного файла, а не из нового. Код, выполняющий копирование, является частью Autoexec для интерфейса - первое, что запускается, как только открывается интерфейс. Бэкэнд находится в облаке, поэтому не открывается соединение с этим макросом. Пойду, чтобы получить некоторый код, чтобы выставить сейчас - я думал, что это будет известная проблема. – Glib