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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Как отключить connect  (Прочитано 4515 раз)
iks
Гость
« : Январь 26, 2011, 13:19 »

Используя QTabWidget, когда закрываю вкладку и потом открываю ее по новой то выдает предупреждение
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
как отключить преведущий конект и подключить по новой, или не подключатся по новой, а использовать уже имеющийся конект

Код:
// подключим mySQL
    QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
    db.setConnectOptions("CLIENT_SSL;CLIENT_COMPRESS"); // ssl соединение и компрессия
    db.setHostName(serverSite);
    db.setDatabaseName(databaseName);
    db.setUserName(userName);
    db.setPassword(userPassword);
    if (db.open()) {
        QSqlQuery sql("SELECT * FROM " + tabName);
        if (sql.isActive()){
            QString str = "";
            while ( sql.next() ) {
                str = str + "<b><i><u><font color=blue>"
                      + sql.value(1).toString() + "</font></u></i></b><br>"
                      + sql.value(2).toString() + "<hr>";
            }
            this->setText(str);
        }
    } else
        QMessageBox::information(this, trUtf8("Новости"), trUtf8("Не получилось открыть базу данных"));
    db.close();
« Последнее редактирование: Январь 26, 2011, 13:35 от iks » Записан
BRE
Гость
« Ответ #1 : Январь 26, 2011, 13:26 »

Перенести код подключения к БД в другое место, например, в main()?
Записан
iks
Гость
« Ответ #2 : Январь 26, 2011, 13:29 »

Перенести код подключения к БД в другое место, например, в main()?
То есть тогда
QSqlDatabase db;
 обьявлять глобально получается или цеплять по всему пути класcов.
Записан
BRE
Гость
« Ответ #3 : Январь 26, 2011, 13:36 »

То есть тогда
QSqlDatabase db;
 обьявлять глобально получается или цеплять по всему пути класcов.
Зачем?
Соединение всегда и везде можно получить через:
QSqlDatabase QSqlDatabase::database ( const QString & connectionName = QLatin1String( defaultConnection ), bool open = true ) [static]
Записан
iks
Гость
« Ответ #4 : Январь 26, 2011, 13:38 »

Спасиб буду экспереминтировать, если что не получится напишу, а заработает тоже напишу полный код  Подмигивающий
Записан
iks
Гость
« Ответ #5 : Январь 26, 2011, 13:57 »

Не мне скорее всего это не подойдет, для одной БД нормально, но все равно ругается если подключение идет к другой БД, надо или connect к серверу ловить и отдельно по БД разгонять, или отключатся и подключатся по новой.
Записан
BRE
Гость
« Ответ #6 : Январь 26, 2011, 14:02 »

Не мне скорее всего это не подойдет, для одной БД нормально, но все равно ругается если подключение идет к другой БД, надо или connect к серверу ловить и отдельно по БД разгонять, или отключатся и подключатся по новой.
Разберись, для чего используется connectionName в этих методах:
QSqlDatabase QSqlDatabase::addDatabase ( const QString & type, const QString & connectionName = QLatin1String( defaultConnection ) ) [static]
QSqlDatabase QSqlDatabase::database ( const QString & connectionName = QLatin1String( defaultConnection ), bool open = true ) [static]

Для того, что бы разобраться как удалять соединения, воспользуйся поиском по форуму на тему removeDatabase.
Записан
iks
Гость
« Ответ #7 : Январь 26, 2011, 15:26 »

Временно применил простое решение, ругатся перестало, в
main.cpp

Код:
#include <QtGui/QApplication>
#include "MainWindow.h"

#include <QtSql>
QSqlDatabase db;

int main(int argc, char *argv[])
{
    // подключим mySQL
    db = QSqlDatabase::addDatabase("QMYSQL");
    db.setConnectOptions("CLIENT_SSL;CLIENT_COMPRESS"); // ssl соединение и компресия
    db.setHostName("xxxx.ru");
    db.setUserName("UserName");
    db.setPassword("Password");

    MainWindow mainWin;
    mainWin.show();

     return app.exec();
}

news.h
Код:
extern QSqlDatabase db;

news.cpp
Код:
void newsClass::openTabMySql(QString dbName, QString tabName){
    db.setDatabaseName(dbName);
    if (db.open()) {
        QSqlQuery sql;
        sql.exec("SELECT * FROM " + tabName);
        if (sql.isActive()){
            QString str = "";
            while (sql.next()) {
                str = str + "<b><i><u><font color=blue>"
                      + sql.value(1).toString() + "</font></u></i></b><br>"
                      + sql.value(2).toString() + "<hr>";
            }
            this->setText(str);
        }
    } else
        QMessageBox::information(this, trUtf8("Новости"), trUtf8("Не получилось открыть базу данных"));

    db.close();
}

может кому пригодится, правда повторюсь прошел простым путем через глобальную переменную, по другому решу отпишусь
« Последнее редактирование: Январь 26, 2011, 15:50 от iks » Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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