Important: Please read the Qt Code of Conduct - https://forum.qt.io/topic/113070/qt-code-of-conduct

QSqlRelationalTableModel submitAll() ma dati non aggiornati nel DB



  • Ciao a tutti,

    database: PostgreeSQL
    os: Windows 10
    Qt: 5.14
    sono partito dall'esempio "relationaltablemodel" modificando la connessione per puntare al mio db che contiene solamente 2 tabelle

    tramite un modello QSqlRelationalTableModel riesco a visualizzare i dati in una tableView ma quando cerco di modificare un campo quest'ultimo non viene aggiornato anche se la submitAll() mi ritorna ok.

    Dialog::Dialog(QWidget *parent)
        : QDialog(parent)
        , ui(new Ui::Dialog)
    {
        ui->setupUi(this);  
        
        QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL");
        db.setHostName("127.0.0.1");
        db.setPort(5432);
        db.setDatabaseName("postgres");
        db.setUserName("postgres");
        db.setPassword("ciao");
        bool ok = db.open();
        if (!ok)
        {
            QMessageBox msgBox;
            msgBox.setText("Cannot open database. " + db.lastError().text());
            msgBox.exec();
        }
    
        qDebug() << db.databaseName();
        qDebug() << db.tables();
    
        model = new QSqlRelationalTableModel;
        initializeModel(model);
        ui->tableView->setModel(model);
        ui->tableView->setItemDelegate(new QSqlRelationalDelegate(ui->tableView));
        ui->tableView->resizeColumnsToContents();
    }
    
    void Dialog::initializeModel(QSqlRelationalTableModel *model)
    {
        model->setTable("tabella_1");
    
        model->setEditStrategy(QSqlTableModel::OnManualSubmit);
        model->setRelation(1, QSqlRelation("tabella_2", "id", "nome"));
    
        bool ok_sel = model->select();
        if (!ok_sel)
        {
            QMessageBox msgBox;
            msgBox.setText("Cannot query database. " + m_model->lastError().text());
            msgBox.exec();
        }
        qDebug() << "total " << model->rowCount();
    }
    
    void Dialog::on_pushButton_clicked()
    {
        bool ok = false;
    
        ok = model->database().transaction();
        if (!ok)
        {
            QMessageBox msgBox;
            msgBox.setText("Transaction database. " + model->database().lastError().text());
            msgBox.exec();
        }
    
        ok = model->submitAll();
        if (ok)
        {
            model->database().commit();
        }
        else
        {
            QMessageBox msgBox;
            msgBox.setText("Model submitAll. " + model->lastError().text());
            msgBox.exec();
        }
    }
    

    Sembra funzionare tutto, ma modifico dei valori presenti in tabella, poi premo il bottone per aggiornare... mi riappaiono i vecchi dati senza alcun errore... ?!?!
    Cosa diavolo sbaglio?
    Avete qualche idea?

    Grazie mille!



  • model->database().commit(); ritorna un booleano. poi controllare se quello e' true?



  • Grazie per il suggerimento @VRonin, tuttavia ritorna true anche il commit().


Log in to reply