Russian Qt Forum

Qt => Базы данных => Тема начата: demiurg от Май 05, 2011, 10:16



Название: Непонятная работа QSqlDataBase
Отправлено: demiurg от Май 05, 2011, 10:16
Вообщем начал работать с БД, создаю соединение , всё работает. Но решил просимулировать разрыв соединения. Вылезли непонятные траблы.

Вообщем  в коде

Кусок где создаётся само подключение и его настройки
Код:
bool EchoServer::start() {
    QHostAddress addr;
      QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL");
        db.setHostName("localhost");
        db.setDatabaseName("test");
        db.setUserName("root");
        db.setPassword("password");
        db.setPort(3309);

\\\настройки сервера


Соединяю бызу данных при первом приходе данных на сервак, и проверяю на разрыв при следующих.
Код:
void EchoServer::onRead()
{
QSqlDatabase db =  QSqlDatabase::database();
QSqlQuery sql = QSqlQuery();
bool c_e=db.isOpen();
 if (!c_e)
        {
        this->i++;
        bool connected = db.open();
            if (!connected)
                {
                cout << STR(QObject::tr("Не могу запустить БД"));
                };
            if (connected)
                {
                 cout << STR(QObject::tr("Переподключение"));
                }
        };
    cout << STR(QObject::tr("->%1\n").arg(i));
//////код обработчика
db.close(); -- ввожу отключение БД ( для симуляции)

Собственно тут и начинается непонятки : по дебагеру и введённой (для проверки дебагера) метки i   сюда bool connected = db.open(); никогда не попадаем , не при включении , не при последующих db.close, хотя переменная c_е и становится false. НО соединение с базой в итоге есть, пишет в базу , извлекает итд.  Вот собственно и непонятки  где собственно он её открывает?



Название: Re: Непонятная работа QSqlDataBase
Отправлено: Amigo_sa от Май 05, 2011, 10:31
Цитировать
QSqlDatabase QSqlDatabase::database ( const QString & connectionName = QLatin1String( defaultConnection ), bool open = true )   [static]
Returns the database connection called connectionName. The database connection must have been previously added with addDatabase(). If open is true (the default) and the database connection is not already open it is opened now. If no connectionName is specified the default connection is used. If connectionName does not exist in the list of databases, an invalid connection is returned.


Название: Re: Непонятная работа QSqlDataBase
Отправлено: demiurg от Май 05, 2011, 13:29
О, точно , спс. Сколько раз зарекался курить help , а не книжки  ;D

Правда тоже лажа получается

Вот так QSqlDatabase db =  QSqlDatabase::addDatabase("QMYSQL","zx");  
            ////////////////////////////////////////////////////////////////////////                  
           QSqlDatabase db =  QSqlDatabase::database("zx",false);
           bool c_e=db.isOpen();
         if (!c_e)    
        {
        bool connected = db.open();
        this->i++;
            if (!connected)
                {
                cout << STR(QObject::tr("Не могу запустить БД"));
                };
            if (connected)
                {
                 cout << STR(QObject::tr("Переподключение"));
                }
        };
Неподключается к БД. По дебагеру  db не принимает значение подключения "zx"

А по дефолту всё ОК. ???

////////////////////
Всё нашёл переопределил объект QSqlQuery sql = QSqlQuery(db) как QSqlQuery sql = QSqlQuery() и вязался с не тем соединением.