Выполнение кода после закрытия базы?

Invisible
Дата: 04.06.2004 09:32:00
Задача такая: если в каталоге есть самораспаковывающийся exe-шник (в котором новая база), нужно закрыть базу и ПОСЛЕ запустить этот SFX - архив.

Как только закрываю текущую базу, выполнение кода останавливается. :(

Почему я решил, что будет иначе? В VBA Excel-я такая тема прокатывает.

Люди, если в пределах Access эту задачу не решить, то подскажите хоть как можно сделать паузу на 3-5сек. в системе (Буду запускать, скажем, bat-файл, в котором ??? выдерживается пауза, после чего запускается exe.)

Скажите - реально ли это сделать в ACCESS?
paparome
Дата: 04.06.2004 09:43:05
автор
как можно сделать паузу на 3-5сек

пиши vbs

автор
Скажите - реально ли это сделать в ACCESS?

Задача (ИМХО) не Асовская, так зачем ее пытаться Аксом решить?

Хочешь Аксом - вот тебе идея:
1. Из Акс1 открываешь Акс2 (которого нет в архиве - он управляющий, не изменяющийся)
2. Закрываешь Акс1
3. В Акс2 открывается форма при старте на которой настроен таймер
4. По срабатыванию таймера, что-то запускаешь
5. Если сможешь определить, что твое запущенное уже закончилось (в данном случаее разархивирование), то:
6. Открываешь Акс1
7. Закрываешь Акс2

Круто?
Exquisite
Дата: 04.06.2004 09:47:34
На вскидку:
Запустить отдельный процесс (на основе того же Акса), который выполнит необходимые действия. Пример есть в ФАКе по сжатию БД.
Недостатки есть, но есть и достоинства: все можно сделать в знакомой среде.
Invisible
Дата: 04.06.2004 09:47:44
Да второй вариант был очевиден. Просто не хотелось на 3сек паузы создавать отдельную базу, когда, например, в Excel и так можно обойтись. Отсюда и возник вопрос про возможности Акса.

А что такое vbs - это поможет?
Exquisite
Дата: 04.06.2004 09:48:16
АпАздАл (с) ЛП
АлексейЕ
Дата: 04.06.2004 09:49:53
Автор - Анатолий (Киев)


Вопрос: Scripting / Wscript: пример перезагрузки БД в текущем окне или замены на другую БД.

Совет:
Предлагаю простой пример перезагрузки БД в текущем окне или замены на другую БД.
Кто пробовал, знает, что процедурой в текущей БД это сделать нельзя.
Методы Application.CloseCurrentDatabase, Application.OpenCurrentDatabase
DBNew должны выполняться внешним приложением.
Предлагаемый вариант использует механизм "Windows Scripting Host" (WSH), который есть почти на всех весиях Windows.

Создается простенький скрипт, сохраняется в TEMP папке и запускается на выполнение. Если DBNew пуст - перезагружается текущая БД.
Повторный вызов функции перезаписывает файл.

Sub ReopenDB(Optional ByVal DBNew As String)
Dim strExpr As String, strTempFile As String, hFile As Integer
Dim WshShl
   
If Len(DBNew) = 0 Then DBNew = CurrentDb.Name

   strExpr = "Dim AccApp" & vbCrLf _
    & "Set AccApp = GetObject(""" & CurrentDb.Name & """)" & vbCrLf _
    & "WScript.Sleep 500" & vbCrLf _
    & "AccApp.CloseCurrentDatabase" & vbCrLf _
    & "AccApp.OpenCurrentDatabase """ & DBNew & """"

   Set WshShl = CreateObject("WScript.Shell")
   strTempFile = WshShl.ExpandEnvironmentStrings("%TEMP%")
   strTempFile = strTempFile & "\RestartDB.vbs"
   
   hFile = FreeFile
   Open strTempFile For Output Access Write As hFile
   Print #hFile, strExpr
   Close hFile
  
   WshShl.Run """" & strTempFile & """"
End Sub
paparome
Дата: 04.06.2004 09:57:07
автор
А что такое vbs - это поможет?


Visual Basic Script (вроде так, т.е. файлы с расширением *.vbs)
Это я предложил вместо bath использовать, т.к. функционала больше, а исполняется прямо из среды, ак батник - да и язык там Васик :)
Invisible
Дата: 04.06.2004 15:06:29
пА-АмА-АгИтЕ!!!

Простейший код на VBS, который, проеряет наличие файла и пытается удалить, до тех пор, пока ему это не удается.
Я попробовал - не получилось (не сраслось :). Хелп?
paparome
Дата: 04.06.2004 15:12:50
Код в студию
Invisible
Дата: 04.06.2004 16:12:25
Опираясь на синтаксис VB, я написал следующее:

on error resume next
set fs=createobject("Scripting.FileSystemObject")
do
kill ("c:\mc\test.txt")
err.clear
loop while fs.Exists ("c:\mc\test.txt")


kill ему не нравится. В последствии, если урать kill, он будет и на fs.Exists ругаться.

Если будете тестировать у себя на компьютере, уберите первую строку, иначе эта зараза ничего не выдаст, а в памяти останется.