Здравствуйте, delphinchik, Вы писали:
D>Необходимо сделать так, что при выполнении одних операций программа не "висла" а отвечала на клики пользователя. Очень часто это бывает необходимо, когда программа выполняет какой то запрос к БД и если он достаточно сложный то на время его выполнения она подвисает. Как избавиться от этого?
Есть более интерсный выход из положения.
Существует 2 вида сединения в сервером БД : синхронный и асинхронный.
При синхронном соединении программа всегда ждет завершения выполненя запроса (виснет). При асинхронном программа посылает запрос и сразу продолжает работать дальше. Когда асинхронный запрос выполнен генерируется соответствующее событие.
Примеры для TADOConnection:
Connection->ConnectOptions = coAsyncConnect; // устанавливает асинхронный режим
Connection->OnConnectComplete = ConnectionConnectComplete; // это событие будет выполняться при завершении запроса.
// Пример тела события
void __fastcall TReconnectionBox::ConnectionConnectComplete(TADOConnection*,
const _di_Error Error, TEventStatus &EventStatus)
{
ShowMessage("Запрос выполнен");
}
// Вызов запросса как обычно...
TADOQuery * query = new TADOQuery;
qyery->Connection = Connection;
query->SQL->Add("select * from table");
query->Open();
// После query->Open() прога пойдет дальше не дожидаясь окончания выполнения запроса.
P.S. Примеры даны для c++Builder, но я уверен, что такое есть в Delphi.