Автоматический перезапуск Access |
|
|
Автор Administrator
|
04.12.2020 г. |
Была (да и есть сейчас) у меня одна задача. В ней необходимо было выгружать в шаблоны Excel информацию. Там было намудрено с ранним и поздним связыванием, так что после выгрузки процесс Excel оставался в памяти и необходимо было перегружать Access. Хотелось бы это делать автоматически сразу после выгрузки. Пробовал использовать командные файлы (bat и cmd) для повторного запуска Access. Потом в интернете наткнулся На vbs скрипт, который делает то же самое. Понравилось.
Текст скрипта, представленный ниже, просто выполняет цикл до тех пор, пока не будет закрыт/удалён файл блокировки (таким образом проверяется закрытие текущей программы), а затем снова запускает базу данных. Для работы он ожидает 2 входных аргумента: (1) полный путь и имя файла базы данных, (2) полный путь и имя файла блокировки.
'Input into a standard text editor, save it with the name RestartDb.vbs 'and place in the same folder as the front-end Dim Database Dim LockFile Dim i Dim sAppEXE Dim sRegKey Database = WScript.Arguments(0) LockFile = WScript.Arguments(1) Set WshShell = CreateObject("WScript.Shell") i = 0 'Wait until the lock file is gone Do While FileExists(LockFile) = True PauseScript WshShell, 250 i = i + 1 if i >= 40 Then 'Number of loops to test for before exiting without success. This number can be adjusted MsgBox "Unable to restart the Database as the Lock File is not going away. Please try to relaunch it manually." Wscript.Quit End If Loop PauseScript WshShell, 750 sAppEXE = "MSACCESS.EXE" sRegKey = "HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\App Paths\" & sAppEXE & "\Path" sAccessPath = WshShell.RegRead(sRegKey) WshShell.Run _ chr(34) & sAccessPath & sAppEXE & _ chr(34) & " " & chr(34) & Database & chr(34) Set WSHShell = Nothing Function FileExists(FilePath) Set fso = CreateObject("Scripting.FileSystemObject") If fso.FileExists(FilePath) Then FileExists = True Else FileExists = False End If End Function Function PauseScript(WshShell, Delay) 'Delay in milliseconds If WshShell Is Nothing Then Set WshShell = CreateObject("WScript.Shell") WScript.Sleep Delay End Function Затем в своей базе данных делается что-то вроде:
Dim sDatabase As String Dim sLockFile As String ' Input argument 1 sDatabase = Application.CurrentDb.Name ' Input argument 2 sLockFile = Replace(sDatabase, ".accdb", ".laccdb") 'sLockFile = Replace(sDatabase, ".mdb", ".ldb") ' Launch the Restart VBScript Shell "wscript """ & Application.CurrentProject.Path & "\RestartDb.vbs"" """ & _ sDatabase & """ """ & sLockFile & """" 'Close Access Application.Quit Ключевым моментом здесь является тот факт, что вы запускаете сценарий до выхода из Access.
Источник - Automatically Restart Access Просмотров: 2091
Ваш коментарий будет первым | | |