crossplatform.ru

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

> Qt + SQLite, Не могу закрыть соединение с базой
Dimix
  опции профиля:
сообщение 24.11.2010, 14:44
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 24.11.2010
Пользователь №: 2215

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




Репутация:   0  


Я новичек в программировании средствами Qt да еще и с использованием SQLite. Прошу сильно не критиковать.

Проблема такова.
Существует главная БД, и N - количество дополнительных БД. В главной БД содержатся имена дополнительных БД. Делаю запрос по выбраному имени из главной БД и присваиваю имя переменной. Закрываю свою главную БД. И осуществляю соединение с БД имя которой содержится в переменной. Получаю.

QSqlQuery::exec: database not open

Я напливал на это оповещение и решил продолжить. Пытаюсь добавить в нее запись (ничего не происходит). Начинаю добавлять запись в Главную БД (соединение с которой разрывал) оно добавляет без проблем. (имена баз все разные) ОБЪЯСНИТЕ НОВИЧКУ. Спасибо!
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
 
Начать новую тему
Ответов
Dimix
  опции профиля:
сообщение 25.11.2010, 13:50
Сообщение #2


Студент
*

Группа: Участник
Сообщений: 74
Регистрация: 24.11.2010
Пользователь №: 2215

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




Репутация:   0  


Ничего не помогает. Может кто то знает еще какие либо варианты почему не получается?
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 25.11.2010, 14:10
Сообщение #3


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

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




Репутация:   44  


Цитата(Dimix @ 25.11.2010, 13:50) *
Ничего не помогает. Может кто то знает еще какие либо варианты почему не получается?

Нужно почитать документацию по QSqlDatabase вообще и про:
void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static]
в частности.
Обратить внимание какой параметр принимает этот метод и посмотреть пример в документации к этому методу, как правильно удалять соединение.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
512es
  опции профиля:
сообщение 2.12.2010, 18:33
Сообщение #4


Участник
**

Группа: Участник
Сообщений: 135
Регистрация: 31.10.2008
Пользователь №: 407

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




Репутация:   0  


Привьём пожалуй любовь к QtSql =))
Сделай вот так:
void Action::listClicked()
{
    QString namedb = list->currentItem()->text();
    QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE",namedb);
    db.setDatabaseName(namedb);
    if (!db.open()) {
        qDebug() << db.lastError().text();
        db.close();
        return 0;
    }
}

bool getDBlist()
{
    { // не спроста тут мы взяли всё это в скобки
        QSqlDatabase db = QSqlDatabase::addDatabase("QSQLITE","masterdb");
        db.setDatabaseName("masterdb");
        if (!db.open()) {
            qDebug() << db.lastError().text();
            db.close();
            return 0;
        }
    }
    // сейчас база данных открыта, но переменная db удалена
    
    QSqlQuery q(QSqlDatabase::database("masterdb")); // вот так можно обратиться к открытому соединению
    if (!q.exec("SELECT name FROM table;")) return 0;
    while (q.next()) list->addItem(q.value(0).toString());
    
    // суть в том, чтобы сейчас не было НИ ОДНОЙ живой переменной указывающей на db
    if (QSqlDatabase::contains("masterdb")) { // masterdb - это имя подключения к бд. такое же как и то, которое мы указали при создании соединения
        if (QSqlDatabase::database("masterdb").isOpen()) QSqlDatabase::database("masterdb").close();
        QSqlDatabase::removeDatabase("masterdb");
    }
    return 1;
}


ещё кажись понадобится q.clear() перед закрытием бд..

Сообщение отредактировал 512es - 2.12.2010, 18:12
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- Dimix   Qt + SQLite   24.11.2010, 14:44
- - panter_dsd   Код приведи закрытия подключения и открытия нового...   24.11.2010, 15:30
|- - Dimix   Цитата(panter_dsd @ 24.11.2010, 15:30) Ко...   24.11.2010, 16:05
- - panter_dsd   Не храни db, ты всегда можешь его получить. Вот та...   24.11.2010, 16:50
|- - Dimix   В этой строке же нужно указать какой тип БД я хочу...   24.11.2010, 17:12
- - panter_dsd   SQLite не поддерживает пароли. QSqlDatabase::data...   24.11.2010, 17:15
|- - Dimix   Цитата(panter_dsd @ 24.11.2010, 17:15) .....   24.11.2010, 17:49
- - panter_dsd   Значит что-то ее держит. Модель какая-нибудь.   24.11.2010, 17:51
|- - Dimix   Цитата(panter_dsd @ 24.11.2010, 18:51) Зн...   24.11.2010, 18:09
- - panter_dsd   Попробуй метод clear ().   24.11.2010, 20:01
- - Dimix   Ничего не помогает. Может кто то знает еще какие л...   25.11.2010, 13:50
|- - BRE   Цитата(Dimix @ 25.11.2010, 13:50) Ничего ...   25.11.2010, 14:10
||- - 512es   Привьём пожалуй любовь к QtSql =)) Сделай вот так:...   2.12.2010, 18:33
|- - Dimix   Проблема вот такого плана существует виджет QLine...   7.12.2010, 15:14
- - Алексей1153   наверное, не зря ругается, и так оно и есть Попро...   7.12.2010, 22:09
|- - Dimix   Цитата(Алексей1153 @ 7.12.2010, 22:09) на...   8.12.2010, 15:56
|- - Dimix   Цитата(Dimix @ 8.12.2010, 15:56) Вопрос в...   8.12.2010, 16:57
- - Litkevich Yuriy   Цитата(Dimix @ 8.12.2010, 18:57) Разобрал...   8.12.2010, 20:30
- - 512es   Dimix, если честно вообще ничего в твоём примере н...   8.12.2010, 20:40
|- - Dimix   Почему не соотвецтвует вопросу . Я же не говорил...   8.12.2010, 20:55
- - 512es   1) склайту не нужно указывать HostName, UserName и...   8.12.2010, 21:05
|- - Dimix   ЦитатаМне показалось или ты и правда пытаешься соз...   10.12.2010, 13:17
|- - Dimix   ЦитатаВ БД существует поле Дата. Как сделать фильт...   10.12.2010, 17:55
- - 512es   Dimix, почитай доки про склайт. совершенно безопас...   10.12.2010, 22:14
- - Dimix   Возникла проблема такого характера. Нужно изменить...   13.12.2010, 2:07


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


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




RSS Текстовая версия Сейчас: 29.3.2024, 2:51