Qt5筆記之數據庫(五)SQL表格模型QSqlTableModel


教程網址:http://www.qter.org/portal.php?mod=view&aid=57

0.打開tablemodel.pro文件,加上:
QT += coregui sql

注意一定得是加上!若把原來那句改了,會報錯

1.添加頭文件connection.h

2.main.cpp文件中include connection.h,調用CreateConnection()方法

3.完成后到mainwindow.h文件中,先包含頭文件:

include

然后添加私有對象:
QSqlTableModel *model;

4.在tableEdit中顯示數據庫tablemodel,常放在mainwindow的構造函數中:

 model = new QSqlTableModel(this);
    model->setTable("student");   //選表
    model->setEditStrategy(QSqlTableModel::OnManualSubmit);  //選編輯策略
    model->select(); //選取整個表的所有行  相當於select all

    //不顯示name屬性列,如果這時添加記錄,則該屬性的值添加不上
    //model->removeColumn(1);

    ui->tableView->setModel(model);   //顯示在tableView中

    //使其不可編輯
    //ui->tableView->setEditTriggers(QAbstractItemView::NoEditTriggers);

在mainwindow.cpp中加上如下內容,方便后面的增刪改查

include "QMessageBox"

include "QSqlError"

6.提交:model->database().transaction(); //開始事務操作
if (model->submitAll()) {
model->database().commit(); //提交
} else {
model->database().rollback(); //回滾
QMessageBox::warning(this, tr("tableModel"),
tr("數據庫錯誤: %1")
.arg(model->lastError().text()));
}

6.撤銷(若未提交則可撤銷所有更改)
model->revertAll();

7.添加:改善了原教程中的主鍵默認值

int rowNum = model->rowCount(); //獲得表的行數
//人工遞增主鍵id
QSqlQuery query;
query.exec("select max(id) from student");
query.first() ;
int id = query.value(0).toInt() + 1;
//添加
model->insertRow(rowNum); //添加一行
model->setData(model->index(rowNum,0),id);
//model->submitAll(); //可以直接提交


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM