Я использую объект TADOConnection в Delphi XE, но это проблема ADO, а не проблема Delphi:
Сценарий: Я пытаюсьзакройте и освободите объект TADOConnection, подключенный к Sybase.Соединение ожидает ответа от удаленного сервера Sybase после отправки долго выполняющегося запроса в Sybase - тем временем пользователь решил, что ответ занимает слишком много времени, и хочет прервать процесс.
Проблема: При попытке закрыть или освободить объект ADOConnection, когда он ожидает ответа Sybase, я получаю следующее сообщение об ошибке:
"Невозможно выполнить операцию при асинхронном выполнении" и мои звонки на закрытие / бесплатный сбой.Таким образом, при прерывании процесса я всегда получаю утечку и потерянное соединение - в моем случае это не конец света, но и нежелательно.
Это сообщение соответствует ошибке ADO 3711-adErrStillExecuting - Операция не может быть выполнена при асинхронном выполнении.
См. http://msdn.microsoft.com/en-us/library/windows/desktop/ms681549%28v=vs.85%29.aspx
Вопрос: Как изменить состояние объекта ADOConnectionтак что он больше не ждет ответа Sybase, что должно позволить мне вызвать TADOConnection.close и TADOConnection.free.
У меня есть доступ к самому ADOConnection через оболочку Delphi TADOConnection, поэтому я могу использовать все, что доступно в ADO TLB, для достижения этой цели.
Примечание. Я не дал явных указаний ADO выполнитьасинхронная операция - я предполагаю, что это значение по умолчанию в контексте, в котором я работаю (поток создается в ответе приложения TISAPI).Несмотря на это, я предполагаю, что если бы блокировка вызова ADO была бы еще сложнее прервать.