MySQL TAdoConnnection соединение "подключено" свойство неправильно установлено True - PullRequest
1 голос
/ 06 июля 2011

У меня есть приложение, которое подключается к базе данных MySql с помощью объекта TAdoConnection от Delphi.Это очень требовательное приложение.Поэтому я создаю соединение и держу его открытым, чтобы избежать больших затрат ресурсов на открытие / закрытие соединений с базой данных.Но, очевидно, могут возникнуть проблемы (перезапуск базы данных, сбой сетевого подключения и т. Д.).Поэтому я встроил код для освобождения объекта базы данных, его воссоздания и повторного подключения при сбое запросов.

У меня есть общая функция для подключения к базе данных.Соответствующий код таков:

try
  AdoConnection.open;
  result := Adoconnection.Connected
except
  result := False;
  ......
end;

Я провел некоторый тест, включив и выключив базу данных MySql.Все работает нормально, если при запуске приложения база данных отключена (т.е. она правильно выдает исключение).Однако, если я отключаю базу данных после того, как приложение уже успешно подключилось, последующие повторные подключения не выдают исключений, и, кроме того, отчет falsley true для AdoConnection.Connected .Я уверен, что объект подключения был сначала освобожден / воссоздан.

Похоже, здесь происходит какой-то механизм кэширования (скорее всего, на уровне аппаратного обеспечения / драйверов, а не на уровне приложений).У кого-нибудь есть идеи?

1 Ответ

0 голосов
/ 18 февраля 2013

Я также наблюдал это.

Идеи для решения этой проблемы:

  1. Если при выполнении запроса появляется ошибка, проверьте, не связана ли она с соединением, и если да, попробуйтепереподключите, а затем снова выполните запрос.
  2. Если ваша программа использует таймер и ждет между выполнением пакетов запросов, то перед каждым пакетом выполните простой запрос (возможно, «выберите сейчас ()»), и если это не удалосьзатем попытайтесь восстановить соединение.
...