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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: И опять закрытие соединения  (Прочитано 3391 раз)
Astrologer
Гость
« : Октябрь 06, 2010, 14:11 »

Всем привет. Пишу как в доке:
Код:
void QuerySet::exec()
{
    {
        QSqlDatabase dbase = QSqlDatabase::addDatabase("QIBASE");
        dbase.setDatabaseName(DBpath);
        dbase.setPassword(pass);
        dbase.setUserName(user);
        bool is = dbase.open();
        myModel->setQuery(tableQuery, dbase);
        int row = myModel->rowCount();
        dbase.close();
    }
    
    QSqlDatabase::removeDatabase("QIBASE");
}

Это функция выполняется в цикле. И каждый раз получается сообщение:
QSqlDatabasePrivate::addDatabase: duplicate connection name 'qt_sql_default_connection', old connection removed.
« Последнее редактирование: Октябрь 06, 2010, 14:13 от Astrologer » Записан
RVZ
Гость
« Ответ #1 : Октябрь 06, 2010, 14:22 »

Попробуй так
.....
Гдето до вызова функции
QSqlDatabase dbase = QSqlDatabase::addDatabase("QIBASE");
..........

{
В функции
QSqlDatabase dbase = QSqlDatabase::Database();
.....
db.close();
}

QSqlDatabase::removeDatabase("QIBASE");

 Рот на замке
« Последнее редактирование: Октябрь 06, 2010, 14:32 от RVZ » Записан
MoPDoBoPoT
Гость
« Ответ #2 : Октябрь 06, 2010, 15:00 »

Так как ты создал соединение по умолчанию (в функции не указал имя соединения), то и удалять надо соединение по умолчанию (а ты удаляешь соединение с именем "QIBASE", которого не существует):
Код
C++ (Qt)
QSqlDatabase dbase = QSqlDatabase::addDatabase("QIBASE");
dbase.setDatabaseName(DBpath);
dbase.setPassword(pass);
dbase.setUserName(user);
bool is = dbase.open();
myModel->setQuery(tableQuery, dbase);
int row = myModel->rowCount();
dbase.close();
 
QString connName = dbase.connectionName();
dbase = QSqlDatabase();
QSqlDatabase::removeDatabase(connName);
 
Записан
eugene
Гость
« Ответ #3 : Октябрь 06, 2010, 18:18 »

Код:

{
QSqlDatabase db = QSqlDatabase::database("connectionName");
    if (!db.isValid())
        db = QSqlDatabase::addDatabase("QSQLITE","connectionName");
    db.setDatabaseName(...);
    ...
    ...
    if(!db.open()) return false;

    QSqlQuery query(db);
    ...
}

QSqlDatabase::removeDatabase("connectionName");
Так должно норм работать
Записан
Astrologer
Гость
« Ответ #4 : Октябрь 08, 2010, 10:10 »

Код:
void QDbfReader::sql_execute(QString query)
{
    QSqlDatabase dbs = QSqlDatabase::addDatabase("QIBASE");
    dbs.setDatabaseName("c:\\database.fdb");
    dbs.setUserName("sysdba");
    dbs.setPassword("masterkey");
    dbs.open();
    dbs.transaction();
    model->setQuery(query, dbs);
    while (model->canFetchMore())
         model->fetchMore();
    view->setModel(model);
    dbs.commit();
    dbs.close();
}

Такой код корректен? Если не считаться пока с "warnings" o  "duplicate connection"?
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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