Всем привет!
Столкнулся с небольшой проблемой.
Есть база access которая запускает большое количество процедур на сервере после нажатия на кнопку.
Хотел сделать примитивный progress bar что бы было понимание на каком степе сейчас идет обработка (что бы было понимание сколько еще примерно осталось времени, так как суммарное время отработки занимает до 2х часов, а количество вовлеченных процедур около 30 штук).
Сделал новую форму, которая открывается после запуска основной процедуры, на всю форму растянуто текстовой поле куда постятся логи по мере выполнения процедур.
На этом вроде как все ОК, проблемы нет, система работает.
Проблема начинает возникать в тот момент когда access благополучно зависает (not responding), и естественно, в этот момент форма перестает обновляться, и все изменения отображаются разом после того как весь процесс отработал.
Как я только не пытался это обойти, и вешал таймер в самом коде между запусками процедур:
Public Declare Sub Sleep Lib "kernel32" (ByVal dwMilliseconds As Long)
Private sub main
CurrentDb.Execute "proc_1"
Forms!Progressbar.Text0 = status_
Forms!Progressbar.Refresh
Sleep 5000
CurrentDb.Execute "proc_2"
End sub
И через me.TimerIterval
Private Sub Form_Timer()
Form_Progressbar.Refresh
End Sub
Ничего из этого мне не помогло.
Пытался даже начать отображать логи в cmd или powershell
process_id = SHELL("C:\windows\system32\powershell.exe", vbNormalFocus)
Но тут столкнулся с другой проблемой, как первоначально передать набор команд в cmd я понимаю и знаю, а вот как дальше работать с созданной cmd зная ее PID я не понимаю.
Надеюсь у вас есть идеи как с этим можно справиться.
Как самый "костыльный" вариант, можно начать постить результат транзакций в отдельной таблице, создавать через объект отдельную сессия экселя, делать внутри него подключение к данной таблице и принудительно рефрешить таблицу, но мне этот вариант как то совсем не нравится.
Заранее спасибо за помощь и варианты.
http://www.sql.ru/forum/1145187/progress-bar