Автоматический перезапуск 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
Просмотров: 1878

  Ваш коментарий будет первым

Добавить коментарий
Имя:
E-mail
Коментарий:



Код:* Code