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(); //可以直接提交

原文地址:https://www.cnblogs.com/YuQiao0303/p/9709768.html