Delphi + Firedac и ошибка сетевого подключения

Мое приложение работает с базой данных MySQL, для подключения я использую компоненты FireDAC. В последний раз, когда у меня возникла проблема с сетью, я тестировал ее, и, похоже, (время от времени) он терял 4 запроса ping. Мое приложение возвращает мне ошибку: «[FireDAC] [Phys] [MySQL] Потеряно соединение с сервером MySQL во время запроса». Теперь вопрос: установка fdconnection.TFDUpdateOptions.LockWait на true (по умолчанию false) решит мою проблему или создаст новые проблемы?


person Mariusz Pluciennik    schedule 24.01.2017    source источник


Ответы (1)


TFDUpdateOptions.LockWait не влияет на ваше подключение к базе данных. Он определяет, что происходит, когда блокировка записи не может быть получена немедленно. В документации это довольно четко сказано:

Используйте свойство LockWait, чтобы контролировать, должен ли FireDAC ждать, пока будет получена пессимистическая блокировка (True), или немедленно вернуть ошибку (False), если запись уже заблокирована. Значение по умолчанию неверно.

Свойство LockWait используется, только если LockMode = lmPessimistic.

FireDAC не может дождаться получения блокировки, если он теряет соединение, поскольку очевидно, что нет никакого способа ни запросить блокировку, ни определить, была ли она получена. Следовательно, изменение LockWait не изменит проблему потери соединения и может замедлить многие другие операции с данными.

Единственное решение для ваших потерянных запросов ping - исправить ваше сетевое соединение, чтобы оно перестало отбрасывать пакеты. Простое случайное изменение параметров на TFDConnection не решит сетевых проблем.

person Ken White    schedule 25.01.2017
comment
Я вас удивляю - это сработало. Теперь, когда соединение восстановлено, приложение больше не зависает - person Mariusz Pluciennik; 26.01.2017