The QTableView control in Qt calls sql for simple arrangement

The QTableView control in Qt calls sql for simple arrangement

1. Create a public method

private:    
  QSqlDatabase m_db;
1)打开数据库
void SqlToolWnd::onInitDBConn()
{   
    m_db = QSqlDatabase::addDatabase("QSQLITE");
    m_db.setDatabaseName("sfclient.db");   
    if(!m_db.open())   
    {       
       qDebug() << "Error: Failed to connect database." << m_db.lastError(); 
    }
}

2. Close the database

void SqlToolWnd::ExitConn()
{
  m_db.close();
}

3. Create a data table

void SqlToolWnd::on_createPushButton_clicked()
{
    onInitDBConn();
    QSqlQuery sql_query;
    if(!sql_query.exec("create table student(id int primary key, name text, sex text)"))
    {
        qDebug() << "Error: Fail to create table."<< sql_query.lastError();
    }
    else
    {
        qDebug() << "Table created!";
    }
    ExitConn();
}

4. Increase data records

void SqlToolWnd::on_addPushButton_clicked()
{
    onInitDBConn();
    QSqlTableModel *model = new QSqlTableModel(this);
    model->setTable(QString::fromLocal8Bit("学生表"));
    model->select();

    int row = model->rowCount();
    model->insertRows(row,1);
    model->setData(model->index(row,0), "1900010105003");
    model->setData(model->index( row,1),QString::fromLocal8Bit("Liu Bei"));
    model->setData(model->index(row,2),QString::fromLocal8Bit("Male"));
    model->setData(model-> index(row,3), "1886-02-20");
    model->setData(model->index(row,4),QString::fromLocal8Bit("Military Application Department"));
    model->setData(model ->index(row,5),QString::fromLocal8Bit("Military Management Science"));
    model->setData(model->index(row,6), "01");
    model->submitAll();

    ui->tableView->setModel(model);
    ExitConn();
}

5. Delete data

void SqlToolWnd::on_deletePushButton_clicked()
{
    onInitDBConn();
    QSqlTableModel *model = new QSqlTableModel(this);
    model->setTable(QString::fromLocal8Bit("学生表"));
    SqlParamDlg paramDlg;
    if(QDialog::Accepted == paramDlg.exec())
    {
        if(!paramDlg.m_param.isEmpty())
        {
            QString sParam = QString(QString::fromLocal8Bit("学生表.'学号'='%1'")).arg(paramDlg.m_param);
            qDebug()<<sParam;
            model->setFilter(sParam);
            model->select();
            if(model->rowCount()==1)
            {
                model->removeRows(0,1);
                model->submitAll();
            }
        }
        else
        {
            QString sParam = QString::fromLocal8Bit("学生表.'性别'='男'");
            qDebug()<<sParam;
            model->setFilter(sParam);
            model->select();
            if(model->rowCount()>0)
            {
                model->removeRows(0,model->rowCount());
                model->submitAll();
            }
        }
    }
    else
    {
        ExitConn();
        return;
    }

    ui->tableView->setModel(model);
    ExitConn();
}

6. Modify data table records

void SqlToolWnd::on_modifyPushButton_clicked()
{     onInitDBConn();     QSqlTableModel *model = new QSqlTableModel(this);     model->setTable(QString::fromLocal8Bit("Configuration"));     SqlParamDlg paramDlg;     if(QDialog::Accepted == paramOption.exec())     {         if(!paramOption.m_param.isEmpty())         {             QString sParam = QString(QString::fromLocal8Bit("Default settings.'location'='%1'; ")).arg(paramSelection.















                record.setValue(QString::fromLocal8Bit("Name"),QString::fromLocal8Bit("Xiahou Dun"));
                model->setRecord(0,record);
                model->submitAll();
            }
        }
    }
    else
    {         ExitConn() ;         return;     }


    ui->tableView->setModel(model);
    ExitConn();
}

7. Query data table records

void SqlToolWnd::on_SelectPushButton_clicked()
{
   onInitDBConn();
   QSqlTableModel *model = new QSqlTableModel(this);
   model->setTable(QString::fromLocal8Bit("学生表"));
   SqlParamDlg paramDlg;
   if(QDialog::Accepted == paramDlg.exec())
   {
       if(!paramDlg.m_param.isEmpty())
       {
           QString sParam = QString(QString::fromLocal8Bit("学生表.'姓名'='%1'")).arg(paramDlg.m_param);
           qDebug()<<sParam;
           model->setFilter(sParam);
       }
       else
       {
           model->setFilter("");
       }
   }
   else
   {
       ExitConn();
       return;
   }
   model->select();
   ui->tableView->setModel(model);
   ExitConn();
}

Description: The QTableView control provides a convenient access to the sql interface. This article simply writes one of the various solutions, which facilitates the operation of sql.

Solution 1: Use the QSqlQuery constructor to operate the database

QSqlQuery query;
query.exec("select Name, Salary FROM Employee where Salary > 1000");
while (query.next())
{
    QString Name = query.value(0).toString();
    int Salary = query.value(1).toInt();
    qDebug() << Name << Salary;
}

Solution 2: Use QSqlQuery and prepare, bindValue

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) " "VALUES (:id, :name, :salary)");
query.bindValue(":id", 10001);
query.bindValue(":name", "Tom");
query.bindValue(":salary", 8500);
query.exec();

Solution 3: Use QSqlQuery and prepare, addBindValue

QSqlQuery query;
query.prepare("INSERT INTO employee (id, name, salary) " "VALUES (:id, :name, :salary)");
query.addBindValue(10001);
query.addBindValue("Tom");
query.addBindValue(8500);
query.exec();

Solution 4: QSqlQueryModel and setQuery, setHeaderData operation data table

QSqlQueryModel *model = new QSqlQueryModel(ui->tableView);
model->setQuery("select * from student");
model->setHeaderData(0,Qt::Horizontal,QObject::tr("name"));
model->setHeaderData(1,Qt::Horizontal,QObject::tr("score"));
ui->tableView->setModel(model);
 

 

Guess you like

Origin blog.csdn.net/leiyang2014/article/details/116572271