Qt QSqlTableModel 使用心得

连接数据库

执行sql查询,条件显示,排序

获取记录数,列数以及记录内容,字段内容

新增,修改,删除,恢复

其它

1---------------连接数据库(我用的access2003做实验)

在.pro文件添加

QT +=SQL

2-----执行sql查询,条件显示,排序model = newQSqlTableModel(this);

model->setTable(“student”);

model->setEditStrategy(QSqlTableModel::OnManualSubmit);

model->select(); //选取整个表的所有行

// model->removeColumn(1); //不显示第二列,如果这时添加记录,则该属性的值添加不上

QTableView *view= new QTableView;

view->setModel(model);

view->show();

//View->setEditTriggers(QAbstractItemView::NoEditTriggers); 使其不可编辑

条件:(等价于SQL语句的where)

model->setFilter(QObject::tr(“name= ‘admin’”).arg(name)); //根据姓名进行筛选

model->select(); //显示结果

排序:(等价于ORDERBY)

model->setSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列

model->select();

model->setSort(0,Qt::DescendingOrder); //id属性,即第0列,降序排

model->select();

3------获取记录数,列数以及记录内容,字段内容记录数: Model->rowcount

记录值:

值=model.record(num).value(1).toString();

Qrecord record= QSqlRecord record = tablemodel.record(记录行数);

值=Record.value(“字段名或索引”)

字段数:

字段值:

4------新增,修改,删除,提交,撤销新增:

int rowNum = model->rowCount();//获得表的行数

int id = 10;

model->insertRow(rowNum); //添加一行

model->setData(model->index(rowNum,0),id);

//model->submitAll(); //可以直接提交

或者用record添加

QSqlRecord record = tablemodel.record();

record.setValue("nam","new");

model.insertRecord(1,record);

修改:

首先用条件找到某一条记录

QSqlRecord record = tablemodel.record(num);

record.setValue("name",record.value("name").toString()+"2");

tablemodel.setRecord(num,record);

if(tablemodel.submitAll())

"成功!"

else

"失败!"

或者用下面方法用setData()来修改,代码如下:

model.setData(model.index(1,1),"new");

if(tablemodel.submitAll())

"成功!"

else

"失败!"

删除:

int curRow = ui->tableView->currentIndex().row();

//获取选中的行

model->removeRow(curRow);

//删除该行

int ok = QMessageBox::warning(this,tr(“删除当前行!”),tr(“你确定”

“删除当前行吗?”),

QMessageBox::Yes,QMessageBox::No);

if(ok == QMessageBox::No)

{

model->revertAll();//如果不删除,则撤销

}

else model->submitAll(); //否则提交,在数据库中删除该行

如果没有table

tablemodel.removeRows(起始行, 要删除的总行数);

model.submitAll();

提交

model->database().transaction();//开始事务操作

if (model->submitAll()) {

model->database().commit();//提交

} else {

model->database().rollback();//回滚

QMessageBox::warning(this,tr(“tableModel”),

tr(“数据库错误: %1″)

.arg(model->lastError().text()));

}

撤销

model->revertAll();

5------其它//一、在QTableView中显示数据库中表的数据

QSqlTableModel *model = new QSqlTableModel(parentObject, database); // 摘抄自帮助文档

model->setTable("employee");

model->setEditStrategy(QSqlTableModel::OnManualSubmit);

model->select();

model->removeColumn(0); // don't show the ID

model->setHeaderData(0, Qt::Horizontal, tr("Name"));

model->setHeaderData(1, Qt::Horizontal, tr("Salary"));

QTableView *view = new QTableView;

view->setModel(model);

view->show();

//二、修改QTableView中数据后的提交,加入事务处理

model->database().transaction(); //开始事务操作

if (model->submitAll()) // 提交所有被修改的数据到数据库中

{

model->database().commit(); //提交成功,事务将真正修改数据库数据

} else {

model->database().rollback(); //提交失败,事务回滚

QMessageBox::warning(this, tr(“tableModel”),tr(“数据库错误: %1″).arg(model->lastError().text()));

}

model->revertAll(); //撤销修改

//三、查询操作,相当于SQL语句:SELECT * FROM 表名 WHERE name = "name变量"

model->setFilter(QObject::tr(“name = ‘%1′”).arg(name)); //根据姓名进行筛选

model->select(); //显示结果

for (int i = 0; i

{

QString name = model.record(i).value("name").toString();

// ... 在此处理每一条的记录

}

// 在操作大数据集时,建议通过索引指定字段

int primaryKeyIndex = model.record().indexOf("id");

for (int i = 0; i

{

QSqlRecord record = model.record(i);

QString name = record.value("name").toString();

// ... 在此处理每一条的记录

}

// 四、排序操作

model->setSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列,Qt::DescendingOrder为降序排序

model->select();

//五、插入操作

int rowNum = model->rowCount(); //获得表的行数

int id = 最后一个ID+1;

model->insertRow(rowNum); //添加一行,或者用insertRows(0,1),在0行添加1条记录,根据表的排序规则,可能移到与指定行不同的行位置上

model->setData(model->index(rowNum,0),id); //因为这里设置了ID为主键,所以必须给新行添加id属性值,id字段在第0列上

model->submitAll(); //可以直接提交

// 六、删除一条记录

model.setFilter("id = 10");

model.select();

if (model.rowCount() == 1)

{

model.removeRows(0,1) // 如果要删除所有满足条件的记录则把1改成model.rowCount()

model.submitAll();

}

// 在QTableView中删除选中的一行

int curRow = tableView->currentIndex().row();

model->removeRow(curRow); //删除一行

// 在QTableView中删除选中的多行

QAbstractItemView::SelectionModeselectionMode()const // 原型

QModelIndexListQItemSelectionModel::selectedIndexes()const //原型

QItemSelectionModel *selections = tableView->selectionModel(); //返回当前的选择模式

QModelIndexList selecteds = selections->selectedIndexes(); //返回所有选定的模型项目索引列表

foreach (QModelIndex index, selecteds)

{

int curRow = index.row(); //删除所有被选中的行

model->removeRow(curRow);

}

int ok = QMessageBox::warning(this,tr("删除选中的行!"),tr("你确定删除当前选取中的行吗?"),QMessageBox::Yes,QMessageBox::No);

if(ok == QMessageBox::Yes)

{

model->submitAll(); //提交,在数据库中删除该行

} else {

model->revertAll(); //如果不删除,则撤销

}

// 七、更新记录

model.setFilter("id = 10");

model.select();

if (model.rowCount() == 1)

{

model.setData(model.index(0,1),QObject::tr("小王"));

model.submitAll();

}

qsql 关联_QSqlTableModel qt 数据库读写 使用方法(转)相关推荐

  1. 数据库读写分离方法浅析

    原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不 ...

  2. qsql 关联_QSqlDatabase和QSqlQuery的正确方法是什么?

    当您使用addDatabase创建QSqlDatabase对象时,或者当您调用removeDatabase时,您只是将一个元组(驱动程序,主机名:端口,数据库名称,用户名/密码)关联或取消关联到名称( ...

  3. 数据库读写分离,主从同步实现方法

    前言 众所周知,随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,而且一般的系统"读"的压力远远大于"写",因此我们可以通过实现数据库的读写分离来提高系 ...

  4. python读取数据库数据类型_Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】...

    本文实例讲述了Python实现从SQL型数据库读写dataframe型数据的方法.分享给大家供大家参考,具体如下: Python的pandas包对表格化的数据处理能力很强,而SQL数据库的数据就是以表 ...

  5. mysql读写分离java配置方法_springboot配置数据库读写分离

    为什么要做数据库读写分离 大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用 ...

  6. 通过一个小项目介绍Python3读写Access数据库(.mdb)的方法

    1. 小项目功能介绍 本文通过一个小项目介绍Python3读写Access数据库(.mdb)的方法,该项目功能较简单,将mdb中的旧编码替换为新编码,新旧编码对照表放在1个excel(本文命名为新旧编 ...

  7. 深入浅出Qt数据库编程:从基本操作到高级技巧

    深入浅出Qt数据库编程:从基本操作到高级技巧 (Demystifying Qt Database Programming: From Basic Operations to Advanced Tech ...

  8. QT数据库访问技术简介

    目录 背景介绍 功能对比 QT中数据库操作常用类介绍 用法实例 数据准备 创建实体类 创建数据库访问类 个人总结 关于如何获取数据库执行过程中的错误以及判断SQL语句执行是否成功执行 关于参数化SQL ...

  9. Spring - 数据库读写分离

    文章目录 Spring - 数据库读写分离 1.读写分离解决方案 1.1 应用层解决 1.2 中间件解决 2.Mysql主从配置 2.1 Mysql主从复制原理 2.2 Master主库配置 2.3 ...

最新文章

  1. 关于WinForm的博客推荐
  2. 【错误记录】Android Gradle 配置报错 ( gradle.properties 配置到 BuildConfig 中需要注意类型转换 | 位置: 类 BuildConfig )
  3. java.util.ConcurrentModificationException 解决办法
  4. activiti 图片
  5. java实现压缩图片的方法
  6. u盘启动蓝屏 索尼vaio_U盘重装系统出现蓝屏?不要急,这四个手段轻松帮你解决!...
  7. python创建二维空列表_python定义二维空数组
  8. 练习题︱基于今日头条开源数据的词共现、新热词发现、短语发现
  9. FISCO BCOS 控制台 call调用已经部署的合约 不存在does not exist
  10. 2.6.PHP7.1 狐教程-【PHP运算符】
  11. php微信wap页面支付,微信 手机网站 h5 wap浏览器 支付
  12. Nero 9 Lite
  13. 音乐计算机锦鲤抄,锦鲤抄 (feat. 银临)
  14. 夜店App不应该是SNS,而应该是O2O
  15. 360 Pika 主从配置
  16. Excel-VBA基础(7):VBE开发环境的主要优化配置
  17. 24位RGB颜色转换为16位RGB
  18. DIY手动定制一个属于自己的软件安装管理器工具盘[二]
  19. autocad java api_在java中实现 AutoCAD api
  20. h5 移动开发 html页面跳转,iosh5混合开发项目仿app页面跳转优化

热门文章

  1. 农产品小程序推广教程总结
  2. linux parted分区教程,分区工具parted的详解及常用分区使用方法
  3. 合并报表软件工具如何合并多个Excel文件
  4. 徐鑫 计算机科学与技术 2008,徐新
  5. 全球及中国LCP行业建议咨询及未来发展趋势可行性研究报告2022版
  6. 教资(信息技术学科知识与教学能力) 1-1信息技术概述、发展
  7. pycharm调试FATE手册
  8. sap 标准委外和工序委外_SAP PP-SAP委外工序业务配置及操作手册 -
  9. win10计算机升级系统,教你用电脑管家升级Win10系统?升级Win10系统的简单方法
  10. Matlab读取Eprime数据(txt文档)