Версия для печати темы

Нажмите сюда для просмотра этой темы в обычном формате

Форум на CrossPlatform.RU _ Qt Разработка баз данных _ Сохранение изменений в БД

Автор: bynet 20.7.2010, 11:20

Открываю БД. (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

model->database().transaction();
    if (model->submitAll()) {
        model->database().commit();
        model->select();
    } else {
        model->database().rollback();
        QMessageBox::critical(); сообщение об ошибке
}

Автор: Litkevich Yuriy 20.7.2010, 14:38

maint, он использует:

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

bynet, я подозреваю, что ты что-то забыл для QDataWidgetMapper. посмотри пример:
%QTDIR%\demos\books\bookwindow.cpp

Автор: bynet 20.7.2010, 15:22

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

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

Автор: Litkevich Yuriy 20.7.2010, 15:43

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

Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)