Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
Форум программистов > Delphi: Базы данных и репортинг > Зависание между BeforeOpen и AfterOpen |
Автор: lonelybooba 24.2.2010, 16:01 | ||||
салют всем. товарищи, я уже голову сломал, подскажите плс как реализовать следующую вещь: в дельфях работаю с DAC for MySQL. выполняю запрос (может не прально выполняю):
Идея такая, что когда выполняется запрос у меня появляется окошко с надписью "Выполняется запрос" и прочей лабудой (не столь важно какой). Делаю это так:
И на этом деле, как вы поняли, всё виснет (запросы большие). Подскажите плс, как "успокоить" приложение, чтобы его можно было спокойно сворачивать и т.п. Application.Processmessages как я понял юзать нельзя, хотя пробовал, но тоже не работает. Заранее спасибо |
Автор: CROTishka 24.2.2010, 16:07 |
Ответ очевиден: выполнять запрос в отдельном потоке. |
Автор: lonelybooba 24.2.2010, 16:10 |
CROTishka, пробовал, не вышло, ибо руки кривые. подскажиет плс как сюда легче всего прикруить тред. з.ы. вообще по идее реализовал давно эту задачу, выводится окошко виснет на 3-4 секунды и потом его можно спокойно двигать пока выполняется запрос, но содержимого окна не видно. но эт не дело, поэтому прошу совета... |
Автор: CROTishka 24.2.2010, 16:34 |
возможных реализаций - куча. Какой вы сделаете - зависит от вас. самый lameпростой на мой взгляд вариант: меняете вашу SQLQuery (хз из какого набора) на аналогичный датасет. File -> New -> Delphi File -> Thread Object При создании передаёте в него 2 пар-ра: условия квери и нотифай эвент, который надо вызвать по завершении. В экзекуте динамически создаёте кверю, вставляете ваш код, тот, что вы привели. По завершении рекордсет, который получили в рез-те запроса, передаёте в обработчик эвента. В обработчике эвента пихаете этот рекордсет в датасет. -> Profit. |
Автор: lonelybooba 24.2.2010, 16:38 |
CROTishka, добро! завтра попробую и обязательно отпишусь, спасибо ![]() |
Автор: lonelybooba 25.2.2010, 11:52 |
CROTishka, всё отлично работает, создал объект, в екзекут засунул обработку запроса. а для нормальной работы датасета все визуальные фишки засунул в отдельную процедуру и связал их Synchronize'ом. вощем разобрался. спасибо;) |
Автор: CROTishka 25.2.2010, 16:08 |
Кушайте не обляпайтесь. ![]() |