• 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 не придет.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

5 ответов на этот вопрос

  • 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 пока, хватает

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Для публикации сообщений создайте учётную запись или авторизуйтесь

Вы должны быть пользователем, чтобы оставить комментарий

Создать учетную запись

Зарегистрируйте новую учётную запись в нашем сообществе. Это очень просто!

Регистрация нового пользователя

Войти

Уже есть аккаунт? Войти в систему.

Войти

Авторизация  

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

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