Russian Qt Forum

Qt => Базы данных => Тема начата: admsasha от Ноябрь 21, 2011, 02:46



Название: Зависание приложения при потери связи с mysql сервером
Отправлено: admsasha от Ноябрь 21, 2011, 02:46
Есть приложение, которое каждую секунду выводит данные из mysql. Если выключить mysql сервер, то всё приложение становится недоступным (в диспетчере "не отвечает"). Как построить логику, чтобы при отсутствии связи всё приложение не зависало, а я мог просто вывести сообщение, "потеря связи с сервером, идет попытка подключения". Причем мог бы спокойно сворачивать, разворачивать окно.


Название: Re: Зависание приложения при потери связи с mysql сервером
Отправлено: Пантер от Ноябрь 21, 2011, 08:52
Покажи код, где ты получаешь инфу.


Название: Re: Зависание приложения при потери связи с mysql сервером
Отправлено: admsasha от Ноябрь 21, 2011, 10:15
в main
Цитировать
    QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL","mydb");
    db.setDatabaseName("mydb");
    db.setUserName("myuser");
    db.setPassword("mypassword");
    db.setHostName("10.10.10.10");
    if( !db.open() ){
        qDebug() << db.lastError();
    }


Функция срабатывает по таймауту QTimer
Цитировать
void myFrom::refresh(){
  QSqlQuery query(QSqlDatabase::database("mydb"));  // тут как я понял происходит зависание

   QString sql="SELECT p1,p2 from table";
    if(!query.exec(sql)){
        QMessageBox::critical(this, QObject::tr("SQL Error"), query.lastError().text());
        return;
    }
    while (query.next()) {
           // тут пишу в нужные поля результат
    }

}



Название: Re: Зависание приложения при потери связи с mysql сервером
Отправлено: Пантер от Ноябрь 21, 2011, 10:18
При ошибке ставишь таймеру больший таймаут.


Название: Re: Зависание приложения при потери связи с mysql сервером
Отправлено: admsasha от Ноябрь 21, 2011, 10:26
Это равнозначно, что и сразу закрыть программу. Т.к. после восстановления связи, нужно либо долго ждать когда произойдет timeout, либо перезагрузить её, что будет быстрее.



Название: Re: Зависание приложения при потери связи с mysql сервером
Отправлено: Пантер от Ноябрь 21, 2011, 10:28
Можно остановить таймер и в диалоге попросить нажать кнопку для реконнекта.


Название: Re: Зависание приложения при потери связи с mysql сервером
Отправлено: admsasha от Ноябрь 21, 2011, 10:38
Ну так видимо и придется.