crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> Сохранение изменений в БД, Не сохраняются изменения
bynet
  опции профиля:
сообщение 20.7.2010, 11:20
Сообщение #1


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

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




Репутация:   0  


Открываю БД. (QSQLITE) База отображается в таблице. В таблице делаю изменение. После закрытия программы изменения не сохраняются. Как правильно сделать сохранения БД?

Код:
CODE
db = QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("dataCompanyDB.db");
db.open();

model = new QSqlRelationalTableModel(this);

model->setTable("company");
model->select();

model->setHeaderData(0, Qt::Horizontal, QString::fromLocal8Bit("Номер"));
model->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("Название"));
model->setHeaderData(2, Qt::Horizontal, QString::fromLocal8Bit("Адрес"));
model->setHeaderData(3, Qt::Horizontal, QString::fromLocal8Bit("УНП"));
model->setHeaderData(4, Qt::Horizontal, QString::fromLocal8Bit("Банк"));
model->setHeaderData(5, Qt::Horizontal, QString::fromLocal8Bit("Расчетный счет"));

mapper = new QDataWidgetMapper(this);
mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
mapper->setModel(model);
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
mapper->addMapping(nameCompany, 1);
mapper->addMapping(adressCompany, 2);
mapper->addMapping(unpEdit, 3);
mapper->addMapping(bankEdit, 4);
mapper->addMapping(numberBankEdit, 5);
mapper->setCurrentIndex(0);

view->setModel(model);


db.close();
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
maint
  опции профиля:
сообщение 20.7.2010, 14:13
Сообщение #2


Участник
**

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

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




Репутация:   2  


model->database().transaction();
    if (model->submitAll()) {
        model->database().commit();
        model->select();
    } else {
        model->database().rollback();
        QMessageBox::critical(); сообщение об ошибке
}
Причина редактирования: используй тэг code
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.7.2010, 14:38
Сообщение #3


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


maint, он использует:
Цитата(bynet @ 20.7.2010, 15:20) *
mapper->setSubmitPolicy(QDataWidgetMapper::AutoSubmit);
ему не нужны транзакции.

bynet, я подозреваю, что ты что-то забыл для QDataWidgetMapper. посмотри пример:
%QTDIR%\demos\books\bookwindow.cpp
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
bynet
  опции профиля:
сообщение 20.7.2010, 15:22
Сообщение #4


Студент
*

Группа: Участник
Сообщений: 69
Регистрация: 17.3.2008
Из: Belarus
Пользователь №: 124

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




Репутация:   0  


Все примеры используют память для хранения бд, мне надо в файл. Поэтому примера нету. Когда я изменяю в таблице значение, оно там остается. Но при закрытии программы, и повторного запуска идет прием данных из бд, данные старые. Буду пробовать пример maint

Помог вариант maint.

Сообщение отредактировал bynet - 20.7.2010, 15:26
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 20.7.2010, 15:43
Сообщение #5


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

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




Репутация:   94  


Цитата(bynet @ 20.7.2010, 19:22) *
Все примеры используют память для хранения бд,
подправь это место, да проверь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 28.6.2022, 8:33