mdlDisease = new QSqlRelationalTableModel(this); mdlDisease->setTable("exdisease"); rel=QSqlRelation("patient","id","family"); mdlDisease->setRelation(0, rel); mdlDisease->setEditStrategy(QSqlRelationalTableModel::OnManualSubmit); mdlDisease->select(); pTblVw->setModel(mdlDisease); pTblVw->setItemDelegate(new QSqlRelationalDelegate(pTblVw)); connect(b1, SIGNAL(clicked()), mdlDisease, SLOT(submitAll()));
Проблема была решена тем, что во всех таблицах, учавствующих в отношении, были созданы (там где не было) столбцы id и назначены первичными ключами.
model = new QSqlTableModel(this); model->setTable("table"); model->setEditStrategy(QSqlTableModel::OnManualSubmit); model->select(); table_view->setModel(model); mapper = new QDataWidgetMapper; mapper->setModel(model); mapper->addMapping(lineEdit1, 1); mapper->addMapping(lineEdit2, 2); connect(table_view->selectionModel(), SIGNAL(currentRowChanged(QModelIndex,QModelIndex)), mapper, SLOT(setCurrentModelIndex(QModelIndex))); table_view->setCurrentIndex(model->index(0, 0)); connect(submit_action, SIGNAL(triggered()), this, SLOT(submit())); connect(add_action, SIGNAL(triggered()), this, SLOT(add()));}void main_window::submit(){ model->database().transaction(); if (model->submitAll()) { model->database().commit(); } else { model->database().rollback(); QMessageBox::warning(this, trUtf8("Моя программа"), trUtf8("Зе датабазе кирдык: %1") .arg(model->lastError().text())); }}void main_window::add(){ model->insertRow(model->rowCount());}