Barra laterale

programmazione:qt:qt_e_i_database

Qt e i database

Autore: Fabio Di Matteo
Ultima revisione: 10/06/2013

Le librerie Qt comprendono anche un valente driver per interagire con molti tipi di database, fra i quali MySql, Postgres, Sqlite. Il fatto di poter abbinare le librerie QT ad un potente strumento di sviluppo RAD come Qt Creator rende le QT un ottimo strumento di sviluppo per applicazioni che fanno uso di basi di dati.

Codice per mostrare il risultato di una select

Con il seguente estratto di codice andremo a mostrare il risultato di una SELECT fatta su una tabella Postgres. Il risultato verra' mostrato all'interno di un widget di tipo tableView. L'interfaccia grafica e il codice per richiamare gli SLOT sono tutti stati generati con QTCreator.
Al click del pulsante “Connetti” (di nome pushButton) avverra la connessione al db.

void MainWindow::on_pushButton_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL7");
    db.setHostName("192.168.1.2");
    db.setDatabaseName("QT_test");
    db.setUserName("postgres");
    db.setPassword("");
    if (db.open())
    {
        ui->statusBar->setStatusTip("Connessione stabilita con successo.");
        qDebug() << "Connessione stabilita con successo.";
 
 
        //Costruisco il modello per la griglia (inserisco le colonne)
        QStandardItemModel *model = new QStandardItemModel();
 
        model->setHorizontalHeaderItem(0, new QStandardItem(QString("ID")));
        model->setHorizontalHeaderItem(1, new QStandardItem(QString("Cognome")));
        model->setHorizontalHeaderItem(2, new QStandardItem(QString("Nome")));
        model->setHorizontalHeaderItem(3, new QStandardItem(QString("E-mail")));
 
 
        //Abbino modello alla griglia
        ui->tableView->setModel(model);
 
        //Query per prelevare i dati
        QSqlQuery query("SELECT id, cognome, nome, email   FROM users",db);
 
        //Ciclo per iterare i record trovati dalla select
        int rowIndex=0;
        while (query.next()) {
 
                // In "query.value(0).toString()" è il contenuto della cella 0, in "query.value(1).toString()"
                // quella della cella 1 e così via...
 
                //Inserisco le celle prelevando il contenuto dal database
                QStandardItem *Cell0 = new QStandardItem(QString(query.value(0).toString())); model->setItem(rowIndex,0,Cell0);
                QStandardItem *Cell1 = new QStandardItem(QString(query.value(1).toString())); model->setItem(rowIndex,1,Cell1);
                QStandardItem *Cell2 = new QStandardItem(QString(query.value(2).toString())); model->setItem(rowIndex,2,Cell2);
                QStandardItem *Cell3 = new QStandardItem(QString(query.value(3).toString())); model->setItem(rowIndex,3,Cell3);
                rowIndex++;
        }
        db.close();
 
    }else{ //Modi diversi per segnalare un errore
        ui->statusBar->setStatusTip("Impossibile stabilire una connessione.");
        qDebug() << "Impossibile stabilire una connessione.";
        QMessageBox::critical(0, qApp->tr("Impossibile aprire il database"), qApp->tr("Impossibile stabilire una connessione.\n"),
                                                                                    QMessageBox::Cancel,QMessageBox::NoButton);
    }
 
 
 
}

Codice necessario per eseguire una insert

Con il codice seguente, invece, andremo ad eseguire una insert nel nostro db.

void Dialog::on_cmdAggiungi_clicked()
{
    QSqlDatabase db = QSqlDatabase::addDatabase("QPSQL7");
    db.setHostName("192.168.1.2");
    db.setDatabaseName("QT_test");
    db.setUserName("postgres");
    db.setPassword("");
    if (db.open())
    {
        qDebug() << "Connessione stabilita con successo.";
 
        //Query per prelevare i dati
        QSqlQuery query("INSERT INTO users( cognome, nome, email )  VALUES \
                        ('"+ui->txtCognome->text()+"', '"+ui->txtNome->text()+"', '"+ui->txtEmail->text()+"');",db);
 
 
    db.close();
    }else{ //Modi diversi per segnalare un errore
 
        qDebug() << "Impossibile stabilire una connessione.";
        QMessageBox::critical(0, qApp->tr("Impossibile aprire il database"), qApp->tr("Impossibile stabilire una connessione.\n"),
                                                                                    QMessageBox::Cancel,QMessageBox::NoButton);
    }
 
    //Chiudiamo la finestra in ogni caso
    this->close();
}

programmazione/qt/qt_e_i_database.txt · Ultima modifica: 18/04/2018 - 15:48 (modifica esterna)