crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

> Некорректное закрытие QSqlDatabase, при использовании QSqlTableModel
Гость_silver_*
сообщение 4.8.2008, 18:27
Сообщение #1





Гости








    


Здравствуйте!

Использую в простеньком приложении QSqlTableModel для отображения и редактирования таблицы.
При закрытии программы выдаёт предупреждение

QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.


Пробовал в деструкторе окна, где используется модель, делать вещи вроде
model->clear();
delete model;


не помогает :(

Оно, вроде бы, и нестрашно, но как-то неправильно. Кто-нибудь сталкивался с таким?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Litkevich Yuriy
  опции профиля:
сообщение 7.8.2008, 0:09
Сообщение #2


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


у меня в классе главного окна создается экземпляр "одиночки", а внем соединение с БД настроек приложения (это я так решил вместо всяких ини-конфигов сделать). далее после конструктора, т.е. после того как окно программы отобразится создается соединение основной БД.
исходник

MainWindow::MainWindow()
{
    mdiArea = new QMdiArea;
    setCentralWidget(mdiArea);
    connect(mdiArea, SIGNAL(subWindowActivated(QMdiSubWindow *)), this, SLOT(updateMenus()));
    
    windowMapper = new QSignalMapper(this);
    connect(windowMapper, SIGNAL(mapped(QWidget *)), this, SLOT(setActiveSubWindow(QWidget *)));

    createActions();    // Создаем действия
    createMenus();        // Создаем меню
    createToolBars();    // Создаем панель инструментов
    createStatusBar();    // Создаем панель статуса
    readWindowSettings();// Читаем настройки окна
    // Создаем экземпляр класса сесии
    auth = Session::InitInstance();    

    
    connect(this, SIGNAL(SigShow()), SLOT(SlotOnShow()));
    
    
}

MainWindow::~MainWindow()
{
    auth->FreeInstance();
}

bool MainWindow::event(QEvent *p_event)
{
    if( p_event->type() == QEvent::ShowToParent)
        emit SigShow();

    return QWidget::event(p_event);
}

/*=====================================================================
                Постинициализация
  ===================================================================*/
void MainWindow::SlotOnShow()
{
  QString    errmsg;
  QString    title = tr("Ошибка программы");

qDebug() << "SlotOnShow: " << QDateTime::currentDateTime() << "\n\r";
  
    // Вход от имени анонимного пользователя
    auth->LoginAnonymous();
    
    // Обновляем меню
    updateMenus();
    
    // Проверяем все ли хорошо с настройками
    if (!auth->isGood(errmsg))
    {
        QMessageBox::critical(this, title, tr("Ошибка настроек, обратитесь к специалисту. Сообщение: \n\r") + errmsg);
        return;
    }
    
    // Здесь проверяется и устанавливается соединение с БД.
  bool ok;
  QSqlDatabase app_db = QSqlDatabase::database("appdb");    // создано в Session::InitInstance();
  QSqlQuery query(app_db);
  QString    querystr;
  QString    qerr;
  
  QString    db_driver;
  QString    db_name;
  QString    db_user_name;
  QString    db_user_paswd;
  
  
    querystr="SELECT F_VALUE FROM APPSETTINGS \
    WHERE ((F_TYPE='db_driver') OR (F_TYPE='db_name') OR \
    (F_TYPE='db_user_name') OR (F_TYPE='db_user_paswd')) \
    ORDER BY F_TYPE ASC";
    ok = query.exec(querystr);
qDebug() << "select DB settings - " << ok << "\n\r";
    
    if (!ok)
    {
        qerr = query.lastError().text();
        QMessageBox::critical(0, title,
                                 tr("Невозможно прочитать настройки БД.\n\r Причина: ")+qerr,
                                QMessageBox::Ok);
    }
    
    query.first();
    if (!query.isValid())
    {
        qerr = query.lastError().text();
        QMessageBox::critical(0, title,
                                 tr("Невозможно прочитать настройки БД.\n\r Причина: ")+qerr,
                                QMessageBox::Ok);
    }
    
    db_driver = query.value(0).toString();
    query.next();
    db_name = query.value(0).toString();
    query.next();
    db_user_name = query.value(0).toString();
    query.next();
    db_user_paswd = query.value(0).toString();
    
    db_main = QSqlDatabase::addDatabase(db_driver,"maindb");
    db_main.setDatabaseName(db_name);
    db_main.setUserName(db_user_name);
    db_main.setPassword(db_user_paswd);
qDebug() << "db_main.open: " << QDateTime::currentDateTime() << "\n\r";
    ok = db_main.open();
    
    if (!ok)
    {
        qerr = db_main.lastError().text();
        QMessageBox::critical(0, title,
                                 QObject::tr("Невозможно установить соединение c БД.\n\r")+qerr,
                                QMessageBox::Ok);
    }
qDebug() << "db_main.open: " << QDateTime::currentDateTime() << "\n\r";
qDebug() << db_main << "\n\r";
}

Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- silver   Некорректное закрытие QSqlDatabase   4.8.2008, 18:27
- - Litkevich Yuriy   Цитата(Гость_silver_* @ 4.8.2008, 22:27) ...   4.8.2008, 18:39
|- - silver   Всё, разобрался! Дело было в том, что я исполь...   4.8.2008, 21:45
- - Litkevich Yuriy   вообще это известное предупреждение и видно его то...   4.8.2008, 22:18
|- - silver   Цитата(Litkevich Yuriy @ 4.8.2008, 22:18)...   4.8.2008, 22:30
- - ViGOur   Цитата(silver @ 4.8.2008, 23:30) поэтому ...   5.8.2008, 11:52
- - acen83   QSqlDataBase* bd=QSqlDataBase::addConnection(...   6.8.2008, 8:28
|- - silver   Цитата(acen83 @ 6.8.2008, 8:28) Что делат...   6.8.2008, 14:43
|- - fortero   Цитата(silver @ 6.8.2008, 14:43) Цитата(a...   29.4.2011, 16:28
- - ViGOur   Читаем описание QSqlDataBase::addConnection: Цитат...   6.8.2008, 9:07
- - Litkevich Yuriy   Цитата(acen83 @ 6.8.2008, 12:28) Что дела...   6.8.2008, 12:58
- - acen83   Цитата(silver @ 6.8.2008, 15:43) Скорее в...   6.8.2008, 18:41
|- - silver   Цитата(acen83 @ 6.8.2008, 18:41) Remove d...   7.8.2008, 16:01
- - Litkevich Yuriy   во-первых, в программе работай по порядку, и дава...   6.8.2008, 19:19
- - acen83   2 Litkevich Yuriy: clear() - возвращало бы все в ...   6.8.2008, 19:51
- - Litkevich Yuriy   у меня в классе главного окна создается экземпляр ...   7.8.2008, 0:09
- - Tonal   2 Litkevich Yuriy Нет нужды делать соединение с БД...   7.8.2008, 7:47
- - Litkevich Yuriy   Цитата(Litkevich Yuriy @ 7.8.2008, 4:09) ...   7.8.2008, 8:33
- - Litkevich Yuriy   Цитата(silver @ 7.8.2008, 20:01) Что ещё ...   7.8.2008, 16:23
- - acen83   Цитата(silver @ 7.8.2008, 17:01) Есть фун...   7.8.2008, 18:45
- - silver   Цитата(acen83 @ 7.8.2008, 18:45) Так чтол...   8.8.2008, 22:33


Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


11 чел. читают эту тему (гостей: 11, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 28.1.2025, 11:26