TLama - это было 10 точки выстрела, спасибо. Я добавил режим amAsync несколько месяцев назад, и я думаю, что я не реализовал всю функциональность.
Теперь я прочитал еще один раз help site here, и есть точный ответ на мой вопрос в примере с циклом while.
Я новичок в stackoverlflow, как я могу отплатить вам, TLama? Вы сохранили несколько часов мои :)
Edit 1
После Frazz предложение приемлемо, я постараюсь, чтобы скопировать информацию из исходной страницы, связанной выше.
FireDacs имеет четыре режима выполнения команд. Вы можете изменить его в FDQuery1.ResourceOptions.CmdExecMode. Вы также можете установить тайм-аут для выполнения команды в FdQuery1.ResourceOptions.CmdExecTimeout.
В CmdExecModes является:
amBlocking - Вызывающий поток и G блокируются до тех пор, пока действие закончено.
amNonBlocking - вызывающий поток блокируется до завершения действия. Графический интерфейс не заблокирован.
amCancelDialog - вызывающий поток и графический интерфейс блокируются до завершения действия. FireDAC показывает диалог, позволяющий отменить действие.
amAsync - вызывающий поток и графический интерфейс не блокируются. Вызываемый метод немедленно возвращается.
Вы можете подождать, пока команда выполняется, проверяя состояние команды:
FDQuery1.ResourceOptions.CmdExecMode := amAsync;
FDQuery1.Open;
while FDQuery1.Command.State = csExecuting do begin
// do something while query is executing
end;
Существует 6 различных команд состояния: csInactive, csPrepared, csExecuting, csOpen, csFetching, csAborting.
У вас есть TADGUIxWaitCursor на вашей форме, а если нет, попробуйте добавить его? – MartynA
Вы изменили значение свойства ResourceOptions.CmdExecMode? (Думаю, вы только что переключились в асинхронный режим)? – TLama
MartynA - У меня есть компонент WaitCursor в приложении. Не в CustomComponent, но я не пытался добавить некоторые. – Quasik