[argento] ui<->database properly connected using QtModel
This commit is contained in:
parent
ac102857f9
commit
28b2375e42
@ -3,75 +3,70 @@
|
|||||||
EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(new Ui::EditWindow) {
|
EditWindow::EditWindow(int idSocio, QWidget* parent) : QMainWindow(parent), ui(new Ui::EditWindow) {
|
||||||
ui->setupUi(this);
|
ui->setupUi(this);
|
||||||
|
|
||||||
/* connect query with common database */
|
/* connect query with common global database */
|
||||||
query = QSqlQuery(db);
|
query = QSqlQuery(db);
|
||||||
|
|
||||||
/* retrieve professione and fonte from database */
|
model = new QSqlRelationalTableModel(this);
|
||||||
query.prepare("SELECT id, professione FROM professione ORDER BY professione");
|
model->setTable("socio");
|
||||||
query.exec();
|
model->setFilter(QString("socio.id = %1").arg(idSocio));
|
||||||
while (query.next()) {
|
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
|
||||||
ui->comboProfessione->addItem(query.value(1).toString(), query.value(0).toInt());
|
|
||||||
}
|
|
||||||
|
|
||||||
query.prepare("SELECT id, fonte FROM fonte ORDER BY fonte");
|
int professioneIdx = model->fieldIndex("professione");
|
||||||
query.exec();
|
int fonteIdx = model->fieldIndex("fonte");
|
||||||
while (query.next()) {
|
|
||||||
ui->comboFonte->addItem(query.value(1).toString(), query.value(0).toInt());
|
|
||||||
}
|
|
||||||
|
|
||||||
/* populate fields from database */
|
model->setJoinMode(QSqlRelationalTableModel::LeftJoin);
|
||||||
query.prepare("SELECT s.id, s.nome, s.cognome, \
|
|
||||||
s.dataNascita, s.comuneResidenza, s.email, s.professione, s.fonte, s.abilitaQuestionario, \
|
|
||||||
q.dataCompilazione \
|
|
||||||
FROM socio AS s LEFT OUTER JOIN questionario AS q ON s.id = q.socio \
|
|
||||||
WHERE s.id = :id");
|
|
||||||
query.bindValue( ":id", idSocio );
|
|
||||||
query.exec();
|
|
||||||
query.first();
|
|
||||||
|
|
||||||
/* show everything in the interface */
|
model->setRelation(professioneIdx, QSqlRelation("professione", "id", "professione"));
|
||||||
ui->lineID->setText(query.value( query.record().indexOf("id") ).toString());
|
model->setRelation(fonteIdx, QSqlRelation("fonte", "id", "fonte"));
|
||||||
ui->lineNome->setText(query.value( query.record().indexOf("nome") ).toString());
|
|
||||||
ui->lineCognome->setText(query.value( query.record().indexOf("cognome") ).toString());
|
|
||||||
ui->lineComuneResidenza->setText(query.value(query.record().indexOf("comuneResidenza")).toString());
|
|
||||||
ui->lineEmail->setText(query.value(query.record().indexOf("email")).toString());
|
|
||||||
ui->comboProfessione->setCurrentIndex(ui->comboProfessione->findData(query.value(query.record().indexOf("professione")).toInt()));
|
|
||||||
ui->comboFonte->setCurrentIndex(ui->comboFonte->findData(query.value(query.record().indexOf("fonte")).toInt()));
|
|
||||||
ui->dateDataNascita->setDate(QDate(1900, 1, 1)); ui->dateDataNascita->setDate(query.value(query.record().indexOf("dataNascita")).toDate());
|
|
||||||
ui->dateDataCompilazione->setDate(QDate(1900, 1, 1)); ui->dateDataCompilazione->setDate(query.value(query.record().indexOf("dataCompilazione")).toDate());
|
|
||||||
ui->checkAbilitaQuestionario->setChecked( query.value(query.record().indexOf("abilitaQuestionario")).toBool() );
|
|
||||||
}
|
|
||||||
|
|
||||||
void EditWindow::on_buttonSalva_clicked() {
|
if (! model->select()) {
|
||||||
|
|
||||||
query.prepare("UPDATE socio \
|
|
||||||
SET nome = NULLIF(:nome, ''), \
|
|
||||||
cognome = NULLIF(:cognome, ''), \
|
|
||||||
dataNascita = NULLIF(:dataNascita, '1900-01-01'), \
|
|
||||||
comuneResidenza = NULLIF(:comuneResidenza, ''), \
|
|
||||||
email = NULLIF(:email, ''), \
|
|
||||||
professione = NULLIF(:professione, 0), \
|
|
||||||
fonte = NULLIF(:fonte, 0), \
|
|
||||||
abilitaQuestionario = :abilitaQuestionario \
|
|
||||||
WHERE id = :id");
|
|
||||||
query.bindValue(":id", ui->lineID->text());
|
|
||||||
query.bindValue(":nome", ui->lineNome->text());
|
|
||||||
query.bindValue(":cognome", ui->lineCognome->text());
|
|
||||||
query.bindValue(":comuneResidenza", ui->lineComuneResidenza->text());
|
|
||||||
query.bindValue(":email", ui->lineEmail->text());
|
|
||||||
query.bindValue(":dataNascita", (ui->dateDataNascita->date()).toString("yyyy-MM-dd"));
|
|
||||||
query.bindValue(":professione", ui->comboProfessione->currentData().toInt());
|
|
||||||
query.bindValue(":fonte", ui->comboFonte->currentData().toInt());
|
|
||||||
query.bindValue(":abilitaQuestionario", ui->checkAbilitaQuestionario->isChecked());
|
|
||||||
|
|
||||||
if ( ! query.exec() ) {
|
|
||||||
qDebug() << fullQuery(query);
|
qDebug() << fullQuery(query);
|
||||||
qDebug() << db.lastError().text();
|
qDebug() << db.lastError().text();
|
||||||
Ui::status(Ui::ERROR, "query error");
|
Ui::status(Ui::ERROR, "query error");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
QSqlTableModel* professioneModel = model->relationModel(professioneIdx);
|
||||||
|
ui->comboProfessione->setModel(professioneModel);
|
||||||
|
ui->comboProfessione->setModelColumn(professioneModel->fieldIndex("professione"));
|
||||||
|
|
||||||
|
QSqlTableModel* fonteModel = model->relationModel(fonteIdx);
|
||||||
|
ui->comboFonte->setModel(fonteModel);
|
||||||
|
ui->comboFonte->setModelColumn(fonteModel->fieldIndex("fonte"));
|
||||||
|
|
||||||
|
QDataWidgetMapper* mapper = new QDataWidgetMapper(this);
|
||||||
|
mapper->setModel(model);
|
||||||
|
mapper->setItemDelegate(new QSqlRelationalDelegate(this));
|
||||||
|
mapper->addMapping(ui->lineID, model->fieldIndex("id"));
|
||||||
|
mapper->addMapping(ui->lineCognome, model->fieldIndex("cognome"));
|
||||||
|
mapper->addMapping(ui->lineNome, model->fieldIndex("nome"));
|
||||||
|
mapper->addMapping(ui->dateDataNascita, model->fieldIndex("dataNascita"));
|
||||||
|
mapper->addMapping(ui->lineComuneResidenza, model->fieldIndex("comuneResidenza"));
|
||||||
|
mapper->addMapping(ui->lineEmail, model->fieldIndex("email"));
|
||||||
|
mapper->addMapping(ui->comboProfessione, professioneIdx);
|
||||||
|
mapper->addMapping(ui->comboFonte, fonteIdx);
|
||||||
|
|
||||||
|
mapper->toFirst();
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
void EditWindow::on_buttonSalva_clicked() {
|
||||||
|
|
||||||
|
if (model->isDirty()) {
|
||||||
|
model->database().transaction();
|
||||||
|
|
||||||
|
if (model->submitAll()) {
|
||||||
|
model->database().commit();
|
||||||
Ui::status(Ui::SUCCESS, "successfull update");
|
Ui::status(Ui::SUCCESS, "successfull update");
|
||||||
|
} else {
|
||||||
|
model->database().rollback();
|
||||||
|
qDebug() << model->lastError();
|
||||||
|
Ui::status(Ui::ERROR, "model transaction submit error");
|
||||||
|
}
|
||||||
|
} else {
|
||||||
|
Ui::status(Ui::INFO, "nothing done");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void EditWindow::on_buttonAnnulla_clicked() {
|
void EditWindow::on_buttonAnnulla_clicked() {
|
||||||
@ -80,5 +75,6 @@ void EditWindow::on_buttonAnnulla_clicked() {
|
|||||||
|
|
||||||
EditWindow::~EditWindow()
|
EditWindow::~EditWindow()
|
||||||
{
|
{
|
||||||
|
delete model;
|
||||||
delete ui;
|
delete ui;
|
||||||
}
|
}
|
||||||
|
@ -4,6 +4,8 @@
|
|||||||
#include <QDebug>
|
#include <QDebug>
|
||||||
#include <QMainWindow>
|
#include <QMainWindow>
|
||||||
#include <QMessageBox>
|
#include <QMessageBox>
|
||||||
|
#include <QtSql>
|
||||||
|
#include <QtWidgets>
|
||||||
|
|
||||||
#include <iostream>
|
#include <iostream>
|
||||||
|
|
||||||
@ -30,6 +32,7 @@ private slots:
|
|||||||
|
|
||||||
private:
|
private:
|
||||||
QSqlQuery query;
|
QSqlQuery query;
|
||||||
|
QSqlRelationalTableModel* model = nullptr;
|
||||||
|
|
||||||
Ui::EditWindow *ui;
|
Ui::EditWindow *ui;
|
||||||
};
|
};
|
||||||
|
Loading…
Reference in New Issue
Block a user