Russian Qt Forum
Сентябрь 29, 2024, 12:33 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: Непонятная работа QSqlDataBase  (Прочитано 2936 раз)
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. НО соединение с базой в итоге есть, пишет в базу , извлекает итд.  Вот собственно и непонятки  где собственно он её открывает?

Записан
Amigo_sa
Гость
« Ответ #1 : Май 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.
Записан
demiurg
Гость
« Ответ #2 : Май 05, 2011, 13:29 »

О, точно , спс. Сколько раз зарекался курить help , а не книжки  Смеющийся

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

Вот так 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() и вязался с не тем соединением.
« Последнее редактирование: Май 05, 2011, 14:25 от demiurg » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.065 секунд. Запросов: 20.