У меня есть модуль данных с глобальным TADOConnection
(по умолчанию KeepConnection
установить значение true). В моем существующем приложении есть множество наборов данных и запросов, которые используют этот глобальный TADOConnection
.Как возобновить/повторить разбитое TADOConnection через приложение?
Мне было интересно, если есть какой-то умный способ возобновить/повторить соединение ado в случае короткого отключения сети? (эта ситуация иногда случается с клиентами, у которых есть не очень стабильные соединения).
Его легко воспроизвести то, что мне нужно. просто откройте TADOConnection
при запуске. откройте TADODataSet
, а затем отключите и включите «Подключение по локальной сети». если вы пытаетесь обновить набор данных, EOleException
возбуждается исключение
"Ошибка подключения"
или
«[DBNETLIB] [ConnectionWrite (отправить()).] Общие сетевой ошибки. Проверьте свою сетевую документацию «
Если я перезапущу приложение, все хорошо.
Во время сетевых отключений события TADOConnection
не регистрируются. и TADOConnection.Connected
остается true
, конечно, я мог бы использовать TRY/поймать для каждого TDataSet.Open
или Execute
но я ищу какое-то «централизованное» решения для моего большого приложения. поэтому в случае «сбоя подключения» я мог бы знать, какой набор данных пытается открыть, и повторите попытку.
Поймать исключение на уровне приложения, а затем повторно попробовать «MyConnection.Connected: = False; MyConnection.Connected: = True; 'для записи наше устаревшее программное обеспечение делает то же самое, и при повторном подключении, из того, что я понимаю, все связанные с ним запросы не имеют другого выбора, кроме как обновляться (открываться снова) вручную - так что держите отслеживать их .. –
Вы мой мой ответ на [этот вопрос] (http://stackoverflow.com/questions/30479459/microsoft-alwayson-failover-solution-and-delphi/30494221#30494221) полезный. Это, по сути, отвечает на один и тот же вопрос, но в контексте SQL Server Always On. Я подозреваю, что переключение AlwaysOn генерирует именно те симптомы, которые вы пытаетесь решить – Kanitatlan
@JerryDodge, я нашел этот похожий ответ: http://stackoverflow.com/a/2291917/3906993 Проблема в том, что вы не знаете, какой набор данных или запрос вызвал исключение. поэтому вы не можете повторить попытку, если вы не отслеживаете каждый набор данных/запрос до и Open/Exec – zig