Russian Qt Forum

Qt => Базы данных => Тема начата: gogi от Июль 10, 2008, 10:23



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


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


Название: Re: Помогите разобраться с базами данных в QT
Отправлено: gogi от Июль 10, 2008, 12:25
Мне не надо сохранять БД в этом тестовом проекте. Как это делать, я знаю. C таким же успехом мог бы БД в памяти сделать.
Мне просто не понятно, почему не удаётся добавлять строки и потом их редактировать во время работы программы.

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


Название: Re: Помогите разобраться с базами данных в QT
Отправлено: Пантер от Июль 10, 2008, 12:58
Все добавляется и редактируется.


Название: Re: Помогите разобраться с базами данных в QT
Отправлено: gogi от Июль 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.


Название: Re: Помогите разобраться с базами данных в QT
Отправлено: Пантер от Июль 10, 2008, 15:21
Код:
void MainForm::Addpressed()
{

QModelIndex insertIndex = tableView->currentIndex();
int row=insertIndex.row()+1;


Название: Re: Помогите разобраться с базами данных в QT
Отправлено: gogi от Июль 14, 2008, 08:57
Всё по прежнему  :(
Может это баг в QT и написать надо в Тролльтеч?


Название: Re: Помогите разобраться с базами данных в QT
Отправлено: Mikhail от Июль 14, 2008, 20:32
Всё по прежнему  :(
Может это баг в QT и написать надо в Тролльтеч?

Ну так сразу и баг.
Посмотри пример с QSqlRelationalTableModel из официальной книги Trolltech.
Там все как тебе надо.
А вообще чтение ассистента еще ниеому не вредило.