При эксплуатации программы "Поликлиника" возникла потребность в выполнении обновления базы или выполнении технологических операций в автоматическом режиме. Для осуществления этого было сделано следующее: 1. В основной базе была сделана таблица UpdateProc (Поля: id счетчик, Proc текст, Ex логическое по умолчанию False). 2. В программной части сделана локальная таблица Upd (Поля: Proc Текст). Для функций обновления был выделен специальный модуль в котором создаются функции вида: Function update110(path) 'дневной стационар Dim db As Database Set db = OpenDatabase(path) On Error GoTo Err:
db.Execute "Alter Table Пациенты ADD id_Zhitel Byte" db.Execute "Alter Table Пациенты ADD PolisDMS text(20)" db.Execute "Alter Table Пациенты ADD DogDMS text(20)" db.Execute "Alter Table Пациенты ADD SMODMS integer"
update110 = True
Exit Function Err: update110 = False MsgBox "ошибки при обновлении 110"
End Function
Если функция подлежит выполнению в автоматическом режиме, то ее имя добавляется в таблицу Upd. В дальнейшем при запуске программы запускается процедура UpdateProg которая добавляет новые имена функций из Upd в UpdateProc по полю Proc и выполняет функции из модуля обновления для которых поле Ex имеет значение False. Это могут быть или новые функции или те которые при предыдущем запуске не удалось выполнить (причины могут быть разные, в основном это блокировка таблицы). Функции которые были успешно выполнены помечаются в поле Ex = True и в дальнейших запусках не участвуют. Sub UpdateProg(path) Dim rst As Recordset On Error Resume Next
CurrentDb.Execute "INSERT INTO UpdateProc ([Proc]) " & _ "SELECT Upd.Proc " & _ "FROM Upd LEFT JOIN UpdateProc ON Upd.Proc = UpdateProc.Proc " & _ "WHERE (((UpdateProc.Proc) Is Null));"
Set rst = CurrentDb.OpenRecordset("select * from UpdateProc where ex=false order by id")
Do Until rst.EOF If Application.Run(rst!Proc, path) = True Then rst.Edit rst!ex = True rst.Update End If
rst.MoveNext Loop
End Sub
Параметр Path в процедуре и функции это путь к базе данных, который берется из файла настройки при запуске программы.
|