![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Dimix |
![]()
Сообщение
#1
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Я новичек в программировании средствами Qt да еще и с использованием SQLite. Прошу сильно не критиковать.
Проблема такова. Существует главная БД, и N - количество дополнительных БД. В главной БД содержатся имена дополнительных БД. Делаю запрос по выбраному имени из главной БД и присваиваю имя переменной. Закрываю свою главную БД. И осуществляю соединение с БД имя которой содержится в переменной. Получаю. QSqlQuery::exec: database not open Я напливал на это оповещение и решил продолжить. Пытаюсь добавить в нее запись (ничего не происходит). Начинаю добавлять запись в Главную БД (соединение с которой разрывал) оно добавляет без проблем. (имена баз все разные) ОБЪЯСНИТЕ НОВИЧКУ. Спасибо! |
|
|
panter_dsd |
![]()
Сообщение
#2
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Код приведи закрытия подключения и открытия нового.
|
|
|
Dimix |
![]()
Сообщение
#3
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Код приведи закрытия подключения и открытия нового.
Вроде все. Просто я там говнокода напечатал. ОЧЕНЬ МНОГО. |
|
|
panter_dsd |
![]()
Сообщение
#4
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Не храни db, ты всегда можешь его получить. Вот так примерно должно быть:
Сообщение отредактировал panter_dsd - 24.11.2010, 16:50 |
|
|
Dimix |
![]()
Сообщение
#5
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
В этой строке же нужно указать какой тип БД я хочу использовать?
А в чем разница хранения? Еще заметил такую проблему вроде создаю запароленные БД, а могу открыть их без пароля. Как правильно? при создании
а при открытии так
|
|
|
panter_dsd |
![]()
Сообщение
#6
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
SQLite не поддерживает пароли.
QSqlDatabase::database () - указатель на дефолтное подключение. Т.е. когда ты делаешь addDatabase создается соединение, к которому ты из любого участка программы сможешь получить доступ через QSqlDatabase::database (). Так же можешь задать имя соединению:
|
|
|
Dimix |
![]()
Сообщение
#7
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Помоему я чет не правильно делаю у меня с дефолтным подключением пишет что БД не открыта. Но суть не в этом. Другими словами почему я подключаюсь к готовой БД SQLite и могу получить из нее данные, а дисконектнутся с ней и подключится к другой для просмотра данных у меня не получается (остается активна первая подключенная БД). |
|
|
panter_dsd |
![]()
Сообщение
#8
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Значит что-то ее держит. Модель какая-нибудь.
|
|
|
Dimix |
![]()
Сообщение
#9
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
panter_dsd |
![]()
Сообщение
#10
|
![]() Жаждущий знаний ![]() ![]() ![]() Группа: Участник Сообщений: 254 Регистрация: 1.1.2009 Из: Санкт-Петербург Пользователь №: 474 Спасибо сказали: 32 раз(а) Репутация: ![]() ![]() ![]() |
Попробуй метод clear ().
|
|
|
Dimix |
![]()
Сообщение
#11
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Ничего не помогает. Может кто то знает еще какие либо варианты почему не получается?
|
|
|
BRE |
![]()
Сообщение
#12
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 1112 Регистрация: 6.3.2009 Из: Ростов-на-Дону Пользователь №: 591 Спасибо сказали: 264 раз(а) Репутация: ![]() ![]() ![]() |
Ничего не помогает. Может кто то знает еще какие либо варианты почему не получается? Нужно почитать документацию по QSqlDatabase вообще и про: void QSqlDatabase::removeDatabase ( const QString & connectionName ) [static] в частности. Обратить внимание какой параметр принимает этот метод и посмотреть пример в документации к этому методу, как правильно удалять соединение. |
|
|
512es |
![]()
Сообщение
#13
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Привьём пожалуй любовь к QtSql =))
Сделай вот так:
ещё кажись понадобится q.clear() перед закрытием бд.. Сообщение отредактировал 512es - 2.12.2010, 18:12 |
|
|
Dimix |
![]()
Сообщение
#14
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Проблема вот такого плана
существует виджет QLineEdit создаю БД по обращению к функции
создаю Таблицу по обращению к функции
пытаюсь заполнить таблицу по обращению к функции
Она ругается на editCreateName->text() вот что пишет : error: ‘editCreateName’ was not declared in this scope Как надо правильно ПОМОГИТЕ! |
|
|
Алексей1153 |
![]()
Сообщение
#15
|
![]() фрилансер ![]() ![]() ![]() ![]() ![]() ![]() Группа: Участник Сообщений: 2943 Регистрация: 19.6.2010 Из: Обливион Пользователь №: 1822 Спасибо сказали: 215 раз(а) Репутация: ![]() ![]() ![]() |
наверное, не зря ругается, и так оно и есть
![]() ui->editCreateName->text() |
|
|
Dimix |
![]()
Сообщение
#16
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Dimix |
![]()
Сообщение
#17
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
Litkevich Yuriy |
![]()
Сообщение
#18
|
![]() разработчик РЭА ![]() ![]() ![]() ![]() ![]() ![]() ![]() Группа: Сомодератор Сообщений: 9669 Регистрация: 9.1.2008 Из: Тюмень Пользователь №: 64 Спасибо сказали: 807 раз(а) Репутация: ![]() ![]() ![]() |
|
|
|
512es |
![]()
Сообщение
#19
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Dimix, если честно вообще ничего в твоём примере не понял.. советую перечитать его (код) ещё раз самому и попытаться представить логику. что и как делается. очень много противоречий и ненужных действий..
|
|
|
Dimix |
![]()
Сообщение
#20
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Почему не соотвецтвует вопросу
![]()
Незнаю я не вижу в коде ненужных действий. P. S. Все время програмировал на Delphi поэтому я новичек в Qt да и впринципе в С++. Может логика и неправильная но во всяком случае я другого решения не нашел. А текущий пример работает (ну пока проблем небыло ![]() |
|
|
512es |
![]()
Сообщение
#21
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
1) склайту не нужно указывать HostName, UserName и Password
2) в чём суть функции maindbCreate()? по сути она вообще ничего не делает 3) maindbCreate.lastError().text() в maindbCreate() это вообщем то возвращаемая переменная. в твоём примере не используется. 4) не правильно:
Для подстановки значений в запрос есть специальная функция prepare():
5)
инсертить так как ты делаешь в эту таблицу не получится. id при вставке не задаёшь. возможно ты хотел сделать так:
6) создаёшь базу QSqlDatabase::addDatabase("QSQLITE"); а удаляешь QSqlDatabase::removeDatabase("QSQLITE"); -- так нельзя. при создании не указываешь имя соединения, только драйвер. а удаляешь по неизвестному имени соединения "QSQLITE". по имени драйвера то нельзя удалять. должно ругаться на ошибки. 7) мне показалось или ты и правда пытаешься создавать и удалять соединения с бд каждый раз? почитай мой пример ещё раз внимательнее |
|
|
Dimix |
![]()
Сообщение
#22
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата Мне показалось или ты и правда пытаешься создавать и удалять соединения с бд каждый раз? почитай мой пример ещё раз внимательнее Я и вправде создаю и удаляю каждый раз драйвер БД. Почему я так решил! У меня работа с данными пользователь может заполнять и удалять их (я сделал как 100% вариант сохранения данных так как соединение и драйвер БД являются отруюленными ошибки при аварийном завершении не будет) Я новичек и еще несильно понимаю как правильно... У меня срочный вопрос. В БД существует поле Дата. Как сделать ильтр по заданному пользователем диапазону. Пример: ___Дата____|К-во|_Чего_ 01, 01, 2010 | 100 | литров 06, 02, 2010 | 200 | литров 01, 01, 2011 | 300 | литров Вывести с 01, 02, 2010 по 01, 06, 2010 года |
|
|
Dimix |
![]()
Сообщение
#23
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Цитата В БД существует поле Дата. Как сделать фильтр по заданному пользователем диапазону. Пример: ___Дата____|К-во|_Чего_ 01, 01, 2010 | 100 | литров 06, 02, 2010 | 200 | литров 01, 01, 2011 | 300 | литров Вывести с 01, 02, 2010 по 01, 06, 2010 года Тип данных у поля date DATA.
|
|
|
512es |
![]()
Сообщение
#24
|
Участник ![]() ![]() Группа: Участник Сообщений: 135 Регистрация: 31.10.2008 Пользователь №: 407 Спасибо сказали: 5 раз(а) Репутация: ![]() ![]() ![]() |
Dimix, почитай доки про склайт. совершенно безопасно сохранять постоянное подключение к бд. мало того, база данных умеет работать и с несколькими пользователями одновременно.
это тебе не xml-ки. кроме того, что то мне подсказывает что создание множества баз данных в твоём случае тоже не обосновано. вот напимер. в моём проекте всего одна база склайта, причём, подключаюсь я к одному и тому же файлу двумя коннектами в разных потоках. тоесть, можно сказать, два пользователя, которые постоянно пишут и читают. размер базы планируется сотни м.б. более десяти таблиц. и всё отлично работает! советую пересмотреть концепцию) |
|
|
Dimix |
![]()
Сообщение
#25
|
![]() Студент ![]() Группа: Участник Сообщений: 74 Регистрация: 24.11.2010 Пользователь №: 2215 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Возникла проблема такого характера. Нужно изменить запись в базе данных. Пример.
ID | NAME | LOOK 1 | TOM | 1 2 | JON | 0 Поле LOOK это Мне нужно чтоб когда я посмотрю пользователя JON его LOOK стал 1 Я думал просто забирать все данные и записывать их по новому а удалять Помогите!
Причина редактирования: не используйте на форуме школьно-студенческие жаргончики и запятые не забывайте
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 23.5.2025, 20:53 |