Спасибо, Юрий! Р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(). Последняя возвращает истину, если изменения сохранены, иначе ложь.