Как сохранить отзывчивость программы при выполнении Anydac Query?
1 ответ
Решение
AnyDAC поддерживает разные режимы исполнения. Для проверки текущего состояния работы используйте ADQuery1.Command.State
, Это псевдокод (здесь у меня нет Delphi):
ADQuery1.ResourceOptions.CmdExecMode := amAsync;
ADQuery1.Open;
while ADQuery1.Command.State = csExecuting do
begin
// This is NOT RECOMMENDED
Application.ProcessMessages;
Sleep(1);
end;
Тем не менее, так как единственное, что вы делаете в вашем while
Блок обрабатывает сообщения GUI, я думаю, что ваша лучшая ставка использует amNonBlocking
режим, который будет ожидать завершения запроса (таким образом избегая while
блок), но не блокирует графический интерфейс (он игнорирует события клавиатуры и мыши, подумал.)
ADQuery1.ResourceOptions.CmdExecMode := amNonBlocking;
ADQuery1.Open;
Для получения дополнительной информации см. Документацию на веб-сайте разработчика: Асинхронное выполнение.