Перейти к содержанию
Fire Monkey от А до Я
  • 0

Обработка разрыва соединения в FireDAC


Камышев Александр

Вопрос

7 часов назад, Vitaldj сказал:

К счастью к сожалению не пользуюсь встроенными в стулию коннекторами к БД, только от devart. Поэтому подсказать не могу(

Раньше тоже пользовался продуктами devart, хоть и недорогие, удобные, надежные, но все же они платные, плюс вообще не люблю подключать сторонние компоненты. 

На oldschool теплом ламповом CBuilder приходилось много всего подключать: скины, компоненты доступа к бд, инди последних версий, компоненты для отчетов, png и т.п. С тех пор стараюсь избегать всего не родного.

FireDAC понравился, хорош CmdExecMode amAsync - The calling thread and GUI are not blocked. The called method will return immediately.

Позволяет работать с базой из основного потока без завешивания, отправил запрос и занимайся другими задачами пока callback не придет.

Ссылка на комментарий

Рекомендуемые сообщения

  • 0
1 час назад, Камышев Александр сказал:

Раньше тоже пользовался продуктами devart, хоть и недорогие, удобные, надежные, но все же они платные, плюс вообще не люблю подключать сторонние компоненты. 

На oldschool теплом ламповом CBuilder приходилось много всего подключать: скины, компоненты доступа к бд, инди последних версий, компоненты для отчетов, png и т.п. С тех пор стараюсь избегать всего не родного.

FireDAC понравился, хорош CmdExecMode amAsync - The calling thread and GUI are not blocked. The called method will return immediately.

Позволяет работать с базой из основного потока без завешивания, отправил запрос и занимайся другими задачами пока callback не придет.

А как обстоит дело с обработкой разрыва соединения? А то у меня проект под win написанный еще на XE7 FireDAC, при малейшем обрыве связи с сервером идет в разнос - каждые несколько секунд появляется новое окошко с сообщением о ошибке, лечится только убитием процесса. Так и не смог обрабатывать корректно эту ошибку, на исключения нет реакции, родные события тоже не помогли.

Ссылка на комментарий
  • 0

разрыв соединения - все корректно обрабатывается

void __fastcall TMyDBClient::ConnectionError( TObject *ASender, TObject *AInitiator, Exception *&AException )
{
status = dbcError;
#ifdef AUX_MODE
	error_string = AException->Message;
#endif
if ( FOnError ) FOnError( (TObject*)this );
Abort();
}
//---------------------------------------------------------------------------

void __fastcall TMyDBClient::QueryError(TObject *ASender, TObject *AInitiator, Exception *&AException)
{
status = dbcError;
#ifdef AUX_MODE
	error_string = AException->Message;
	error_string += "\r\nsql: " + fquery->SQL->Text;
#endif
if ( FOnError ) FOnError( (TObject*)this );
Abort();
}
//---------------------------------------------------------------------------

void __fastcall TMyDBClient::AfterDisconnect(TObject *Sender)
{
status = dbcNotConn;
#ifdef AUX_MODE
	log_string = "db - disconnect";
	if ( FOnLog ) FOnLog( (TObject*)this );
#endif
}

Abort() - чтобы не было исключения в Application

так тишина и только логи шелестят переподключениями

Ссылка на комментарий
  • 0
15 минут назад, Камышев Александр сказал:

разрыв соединения - все корректно обрабатывается


void __fastcall TMyDBClient::ConnectionError( TObject *ASender, TObject *AInitiator, Exception *&AException )
{
status = dbcError;
#ifdef AUX_MODE
	error_string = AException->Message;
#endif
if ( FOnError ) FOnError( (TObject*)this );
Abort();
}
//---------------------------------------------------------------------------

void __fastcall TMyDBClient::QueryError(TObject *ASender, TObject *AInitiator, Exception *&AException)
{
status = dbcError;
#ifdef AUX_MODE
	error_string = AException->Message;
	error_string += "\r\nsql: " + fquery->SQL->Text;
#endif
if ( FOnError ) FOnError( (TObject*)this );
Abort();
}
//---------------------------------------------------------------------------

void __fastcall TMyDBClient::AfterDisconnect(TObject *Sender)
{
status = dbcNotConn;
#ifdef AUX_MODE
	log_string = "db - disconnect";
	if ( FOnLog ) FOnLog( (TObject*)this );
#endif
}

Abort() - чтобы не было исключения в Application

так тишина и только логи шелестят переподключениями

Чудесно! Попробую переписать под Берлин. В XE7 эти события при разрыве даже не вызывались :-(

Ссылка на комментарий
  • 0
5 минут назад, Евгений Корепов сказал:

Чудесно! Попробую переписать под Берлин. В XE7 эти события при разрыве даже не вызывались :-(

у меня seattle пока, хватает

Ссылка на комментарий

Присоединяйтесь к обсуждению

Вы можете написать сейчас и зарегистрироваться позже. Если у вас есть аккаунт, авторизуйтесь, чтобы опубликовать от имени своего аккаунта.

Гость
Ответить на вопрос...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

  • Последние посетители   0 пользователей онлайн

    • Ни одного зарегистрированного пользователя не просматривает данную страницу
×
×
  • Создать...