crossplatform.ru

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

 
Ответить в данную темуНачать новую тему
> QSqlTableRelationalModel, какой сигнал испускается, если изменения в базе данных не сохранились?
esculapius
  опции профиля:
сообщение 14.2.2010, 13:18
Сообщение #1


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 7.2.2010
Пользователь №: 1449

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




Репутация:   0  


Доброго времени суток, всем!
Программированием занимаюсь очень короткое время, на Qt4.5.0. и по-давно.
Задача такова: Используя QSqlRelationalTableModel, создаю модель, представляю его.
в него можно добавлять данные, редактировать его, удалять записи.
При это каждая запись уникальна, обеспечивается движком БД (SQLite3).
Хотелось бы при вводе запись, уже имеющегося в БД, выводилось сообщение, что данная запись уже есть в нем и узнать какой сигнал или функция отвечает за это! Поможите, люди добрыя, темному!!! Заранее благодарю за помощь! :blink: а то башка не соображает совсем
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 14.2.2010, 14:12
Сообщение #2


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

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

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




Репутация:   94  


Цитата(esculapius @ 14.2.2010, 16:18) *
При это каждая запись уникальна, обеспечивается движком БД (SQLite3).
Хотелось бы при вводе запись, уже имеющегося в БД, выводилось сообщение, что данная запись уже есть в нем
сигнал в такой ситуации не испускается, просто произойдёт ошибка. Т.е. некая функция сохранения вернёт ложь. Далее ошибку можно посмотреть, например так:
model->lastError().databaseText()
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
esculapius
  опции профиля:
сообщение 14.2.2010, 15:55
Сообщение #3


Новичок


Группа: Новичок
Сообщений: 2
Регистрация: 7.2.2010
Пользователь №: 1449

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




Репутация:   0  


Спасибо, Юрий! Рaзрешил проблему. Интересно то, что ошибка не выдается.
Если кому интересно, в БД есть таблица:
...
create table sostav_group(sgid integer primary key, group_cod smallint, stutend_cod smallint unique, unique(group_cod,stutend_cod));
...


В QtCreator создаю релашнмодель и табличное представление для нее.

    MainWindow::MainWindow(QWidget *parent)
    : QMainWindow(parent), ui(new Ui::MainWindow)
{...
    sostav_group = new QSqlRelationalTableModel();
    sostav_group->setTable("sostav_group");
    sostav_group->setHeaderData(1, Qt::Horizontal, QString::fromLocal8Bit("Группа"));
    sostav_group->setHeaderData(2, Qt::Horizontal, QString::fromLocal8Bit("Студент"));
    sostav_group->setRelation(1,QSqlRelation("groups","group_cod","group_name"));
    sostav_group->setRelation(2,QSqlRelation("students","Stutend_cod","FIO"));
    sostav_group->setSort(1,Qt::AscendingOrder);

    //ui->tableView_3->setColumnHidden(2, true);
    sostav_group->select(); sostav_group->setEditStrategy(QSqlTableModel::OnManualSubmit);
    ui->tableView_3->setModel(sostav_group);
    ui->tableView_3->setColumnHidden(0, true);
    ui->tableView_3->setSelectionBehavior(QAbstractItemView::SelectRows);
    ui->tableView_3->setItemDelegate(new QSqlRelationalDelegate(this));
    ui->tableView_3->setSelectionMode(QAbstractItemView::SingleSelection);
  
    connect(ui->addStudinGroupButton, SIGNAL(clicked()),this, SLOT(slotaddStudinGroup()));
    connect(ui->DelStudinGroupButton,SIGNAL(clicked()), this, SLOT(slotDelStudinGroup()));
    connect(ui->saveButton,SIGNAL(clicked()),this,SLOT(slotSave()));
    ...
}

Идея: при нажатии кнопки saveButton вызывается слот slotSave()
...
void MainWindow::slotSave()
{
    students->submitAll();
    students->select();
  //  qDebug()<<"Привет мир!";
    ved_kafedra->submitAll();
    ved_kafedra->select();
    //
    zadoljnost->submitAll();
    zadoljnost->select();
    sostav_group->submitAll();
    if (sostav_group->submitAll()==false)
    {
        QMessageBox::critical(0,"CООБЩЕНИЕ","Данная запись уже существует");
    }
    else
    {
     QMessageBox::information(0,"CООБЩЕНИЕ","Изменения сохранены");
    }
    sostav_group->select();
}
...

в реализации, которой для сохранения изменений используется функция submitAll(). Последняя возвращает истину, если изменения сохранены, иначе ложь.
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

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


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




RSS Текстовая версия Сейчас: 27.4.2024, 9:11