Привет всем.
У меня есть некая база на Access2000. Внутри на VB зашита некая логика, которая в общем случае работает достаточно долго (например, экспорт нескольких таблиц в mysql через odbc).
Так вот. Открываю я формочку, нажимаю на кнопку --- и оно начинает работать. При этом Access как-бы подвисает, окна свои не перерисовывает.
Я же хочу вывести на форму что-нибудь вроде status bar, чтобы пользователю было не столь грустно ожидать окончания процесса.
Как заставить Access отрисовывать то, что я вывожу, не дожидаясь, пока освободятся ресурсы (то есть фактически пока отработает основной алгоритм)?
.Refresh (или что-то в этом роде, не помню) на форме пробовал, не помогает.
---
Александр Ющенко
Re: Непрорисовка окон в процессе работы Access2000
S> Как заставить Access отрисовывать то, что я вывожу, не дожидаясь, пока освободятся ресурсы (то есть фактически пока отработает основной алгоритм)? S> .Refresh (или что-то в этом роде, не помню) на форме пробовал, не помогает.
Уже сам нашел.
.Repaint
---
Александр Ющенко
Re[2]: Непрорисовка окон в процессе работы Access2000
S>> Как заставить Access отрисовывать то, что я вывожу, не дожидаясь, пока освободятся ресурсы (то есть фактически пока отработает основной алгоритм)? S>> .Refresh (или что-то в этом роде, не помню) на форме пробовал, не помогает.
S> Уже сам нашел. S> .Repaint
Рановато порадовался.
Все равно частенько не отрисовывает.
Есть у кого-нибудь еще идеи?
---
Александр Ющенко
Re[3]: Непрорисовка окон в процессе работы Access2000
Здравствуйте, shurik13, Вы писали:
S>>> Как заставить Access отрисовывать то, что я вывожу, не дожидаясь, пока освободятся ресурсы (то есть фактически пока отработает основной алгоритм)?
S> Есть у кого-нибудь еще идеи?
А асинхронные запросы не помогут?
Re[4]: Непрорисовка окон в процессе работы Access2000
S>>>> Как заставить Access отрисовывать то, что я вывожу, не дожидаясь, пока освободятся ресурсы (то есть фактически пока отработает основной алгоритм)?
S>> Есть у кого-нибудь еще идеи?
A>А асинхронные запросы не помогут?
А разве Access умеет? Если да, то как?
А если я там не запросы кручу, а код на vb, просто долго?
Здравствуйте, shurik13, Вы писали:
A>>А асинхронные запросы не помогут?
S> А разве Access умеет? Если да, то как? S> А если я там не запросы кручу, а код на vb, просто долго?
Не знаю, как более ранние версии. Речь идет об Access XP. А там примерно так:
Set recordset = object.OpenRecordset (type, options, lockedits), где в options есть и такая: dbRunAsync (Runs an asynchronous query (ODBCDirect workspaces only)).
Та же опция есть и для исполняемых запросов, когда применяетс метод Execute. Вот только сам в Access этим не разу не пользовался. Только теоретически.
Re: Непрорисовка окон в процессе работы Access2000
Здравствуйте, shurik13, Вы писали:
S> Привет всем. S> У меня есть некая база на Access2000. Внутри на VB зашита некая логика, которая в общем случае работает достаточно долго (например, экспорт нескольких таблиц в mysql через odbc). S> Так вот. Открываю я формочку, нажимаю на кнопку --- и оно начинает работать. При этом Access как-бы подвисает, окна свои не перерисовывает. S>Я же хочу вывести на форму что-нибудь вроде status bar, чтобы пользователю было не столь грустно ожидать окончания процесса. S> Как заставить Access отрисовывать то, что я вывожу, не дожидаясь, пока освободятся ресурсы (то есть фактически пока отработает основной алгоритм)? S> .Refresh (или что-то в этом роде, не помню) на форме пробовал, не помогает.
Не знаю насколько тут оно поможет, но
если у в цикле что-то работает долго, то полезно в цикле иногда вызывать
DoEvents
Эта функция "прокачает" оконные сообщения в очереди, в том числе и WM_PAINT,
что позволит прорисовывать изменения в status bar, или нажать кнопку Cancel и т. д.