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

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


Участник
**

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

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




Репутация:   0  


1) склайту не нужно указывать HostName, UserName и Password

2) в чём суть функции maindbCreate()? по сути она вообще ничего не делает

3) maindbCreate.lastError().text() в maindbCreate() это вообщем то возвращаемая переменная. в твоём примере не используется.

4) не правильно:
queryMaindbInsert.exec("INSERT INTO (name) VALUES ('"+editCreateName->text()+"');");

Для подстановки значений в запрос есть специальная функция prepare():
queryMaindbInsert.prepare("INSERT INTO (name) VALUES (?);");
queryMaindbInsert.addBindValue(ui->editCreateName->text());
if (!queryMaindbInsert.exec()) {qDebug() << queryMaindbInsert.lastError().text(); return;}


5)
CREATE TABLE user (id INTEGER PRIMARY KEY NOT NULL, name VARCHAR(20));

инсертить так как ты делаешь в эту таблицу не получится. id при вставке не задаёшь. возможно ты хотел сделать так:
id INTEGER PRIMARY KEY AUTOINCREMENT


6) создаёшь базу QSqlDatabase::addDatabase("QSQLITE"); а удаляешь QSqlDatabase::removeDatabase("QSQLITE"); -- так нельзя. при создании не указываешь имя соединения, только драйвер. а удаляешь по неизвестному имени соединения "QSQLITE". по имени драйвера то нельзя удалять. должно ругаться на ошибки.

7) мне показалось или ты и правда пытаешься создавать и удалять соединения с бд каждый раз? почитай мой пример ещё раз внимательнее
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Dimix
  опции профиля:
сообщение 10.12.2010, 13:17
Сообщение #3


Студент
*

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

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




Репутация:   0  


Цитата
Мне показалось или ты и правда пытаешься создавать и удалять соединения с бд каждый раз? почитай мой пример ещё раз внимательнее

Я и вправде создаю и удаляю каждый раз драйвер БД. Почему я так решил! У меня работа с данными пользователь может заполнять и удалять их (я сделал как 100% вариант сохранения данных так как соединение и драйвер БД являются отруюленными ошибки при аварийном завершении не будет) Я новичек и еще несильно понимаю как правильно...
У меня срочный вопрос.
В БД существует поле Дата. Как сделать ильтр по заданному пользователем диапазону.
Пример:
___Дата____|К-во|_Чего_
01, 01, 2010 | 100 | литров
06, 02, 2010 | 200 | литров
01, 01, 2011 | 300 | литров

Вывести с 01, 02, 2010 по 01, 06, 2010 года
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

Сообщений в этой теме
- 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


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


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




RSS Текстовая версия Сейчас: 31.10.2024, 21:18