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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Помогите разобраться с базами данных в QT  (Прочитано 6161 раз)
gogi
Гость
« : Июль 10, 2008, 10:23 »

Уже который день бьюсь  Непонимающий
У меня возникают сложности с добавлением/удалением записей в базу данных.
Вот написал тестовый проект, в котором просматривается проблема с добавлением (приаттачен).
Суть проблемы - нажимаю кнопку 'Add' - запись добавляется. Я её могу редактировать, но потом если я нажму ещё раз 'Add', то все мои изменения исчезают.
Сейчас у меня по умолчанию заносится запись "www" (любой текст), мне она вообще не нужна, но без вызовов setData("www") и commit() ещё хуже получается.
Непонятно, как лучше делать model->submit() или model->submitAll()? И ещё - как эти submit'ы соотносятся с коммитами (QSqlDatabase::commit()) для базы данных?
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #1 : Июль 10, 2008, 10:55 »

 Ты коннект к базе не закрываешь, поэтому ничего не происходит.
1. В h определи QSqlDatabase db
2. Определи MainForm::~MainForm()
3. В  ~MainForm() запиши:
Код:
	db.commit();
db.close();
И все будет. Дальше думаю разберешься.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gogi
Гость
« Ответ #2 : Июль 10, 2008, 12:25 »

Мне не надо сохранять БД в этом тестовом проекте. Как это делать, я знаю. C таким же успехом мог бы БД в памяти сделать.
Мне просто не понятно, почему не удаётся добавлять строки и потом их редактировать во время работы программы.

Насчёт db. Насколько я понял - её не нужно определять как глобальную. Если нужно обращаться к БД, то всегда можно вызвать QSqlDatabase db = QSqlDatabase::database();
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #3 : Июль 10, 2008, 12:58 »

Все добавляется и редактируется.
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gogi
Гость
« Ответ #4 : Июль 10, 2008, 13:25 »

Ещё раз описание проблемы - после запуска в таблице одна строка. Жму Add. Появляется строка 2. В ней написано "www". Меняю на "222". Жму ещё раз Add. Появляется третья строка (с "www") и во второй строке какого-то хрена надпись становится также "www".

Проверял под: Debian GNU/Linux 4.0 (testing), g++ - 4.3.1-2, Qt - 4.4.0-3; Windows XP SP2 - MinGW-3.4.2, qt-win-opensource-4.4.0-mingw.
Записан
Пантер
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 5876


Жаждущий знаний


Просмотр профиля WWW
« Ответ #5 : Июль 10, 2008, 15:21 »

Код:
void MainForm::Addpressed()
{

QModelIndex insertIndex = tableView->currentIndex();
int row=insertIndex.row()+1;
Записан

1. Qt - Qt Development Frameworks; QT - QuickTime
2. Не используйте в исходниках символы кириллицы!!!
3. Пользуйтесь тегом code при оформлении сообщений.
gogi
Гость
« Ответ #6 : Июль 14, 2008, 08:57 »

Всё по прежнему  Грустный
Может это баг в QT и написать надо в Тролльтеч?
Записан
Mikhail
Программист
*****
Offline Offline

Сообщений: 586


Просмотр профиля
« Ответ #7 : Июль 14, 2008, 20:32 »

Всё по прежнему  Грустный
Может это баг в QT и написать надо в Тролльтеч?

Ну так сразу и баг.
Посмотри пример с QSqlRelationalTableModel из официальной книги Trolltech.
Там все как тебе надо.
А вообще чтение ассистента еще ниеому не вредило.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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