qsql 关联_QSqlTableModel qt 数据库读写 使用方法(转)
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 数据库读写 使用方法(转)相关推荐
- 数据库读写分离方法浅析
原创作品,出自 "晓风残月xj" 博客,欢迎转载,转载时请务必注明出处(http://blog.csdn.net/xiaofengcanyuexj). 由于各种原因,可能存在诸多不 ...
- qsql 关联_QSqlDatabase和QSqlQuery的正确方法是什么?
当您使用addDatabase创建QSqlDatabase对象时,或者当您调用removeDatabase时,您只是将一个元组(驱动程序,主机名:端口,数据库名称,用户名/密码)关联或取消关联到名称( ...
- 数据库读写分离,主从同步实现方法
前言 众所周知,随着用户量的增多,数据库操作往往会成为一个系统的瓶颈所在,而且一般的系统"读"的压力远远大于"写",因此我们可以通过实现数据库的读写分离来提高系 ...
- python读取数据库数据类型_Python实现从SQL型数据库读写dataframe型数据的方法【基于pandas】...
本文实例讲述了Python实现从SQL型数据库读写dataframe型数据的方法.分享给大家供大家参考,具体如下: Python的pandas包对表格化的数据处理能力很强,而SQL数据库的数据就是以表 ...
- mysql读写分离java配置方法_springboot配置数据库读写分离
为什么要做数据库读写分离 大多数互联网业务,往往读多写少,这时候,数据库的读会首先称为数据库的瓶颈,这时,如果我们希望能够线性的提升数据库的读性能,消除读写锁冲突从而提升数据库的写性能,那么就可以使用 ...
- 通过一个小项目介绍Python3读写Access数据库(.mdb)的方法
1. 小项目功能介绍 本文通过一个小项目介绍Python3读写Access数据库(.mdb)的方法,该项目功能较简单,将mdb中的旧编码替换为新编码,新旧编码对照表放在1个excel(本文命名为新旧编 ...
- 深入浅出Qt数据库编程:从基本操作到高级技巧
深入浅出Qt数据库编程:从基本操作到高级技巧 (Demystifying Qt Database Programming: From Basic Operations to Advanced Tech ...
- QT数据库访问技术简介
目录 背景介绍 功能对比 QT中数据库操作常用类介绍 用法实例 数据准备 创建实体类 创建数据库访问类 个人总结 关于如何获取数据库执行过程中的错误以及判断SQL语句执行是否成功执行 关于参数化SQL ...
- Spring - 数据库读写分离
文章目录 Spring - 数据库读写分离 1.读写分离解决方案 1.1 应用层解决 1.2 中间件解决 2.Mysql主从配置 2.1 Mysql主从复制原理 2.2 Master主库配置 2.3 ...
最新文章
- 关于WinForm的博客推荐
- 【错误记录】Android Gradle 配置报错 ( gradle.properties 配置到 BuildConfig 中需要注意类型转换 | 位置: 类 BuildConfig )
- java.util.ConcurrentModificationException 解决办法
- activiti 图片
- java实现压缩图片的方法
- u盘启动蓝屏 索尼vaio_U盘重装系统出现蓝屏?不要急,这四个手段轻松帮你解决!...
- python创建二维空列表_python定义二维空数组
- 练习题︱基于今日头条开源数据的词共现、新热词发现、短语发现
- FISCO BCOS 控制台 call调用已经部署的合约 不存在does not exist
- 2.6.PHP7.1 狐教程-【PHP运算符】
- php微信wap页面支付,微信 手机网站 h5 wap浏览器 支付
- Nero 9 Lite
- 音乐计算机锦鲤抄,锦鲤抄 (feat. 银临)
- 夜店App不应该是SNS,而应该是O2O
- 360 Pika 主从配置
- Excel-VBA基础(7):VBE开发环境的主要优化配置
- 24位RGB颜色转换为16位RGB
- DIY手动定制一个属于自己的软件安装管理器工具盘[二]
- autocad java api_在java中实现 AutoCAD api
- h5 移动开发 html页面跳转,iosh5混合开发项目仿app页面跳转优化
热门文章
- 农产品小程序推广教程总结
- linux parted分区教程,分区工具parted的详解及常用分区使用方法
- 合并报表软件工具如何合并多个Excel文件
- 徐鑫 计算机科学与技术 2008,徐新
- 全球及中国LCP行业建议咨询及未来发展趋势可行性研究报告2022版
- 教资(信息技术学科知识与教学能力) 1-1信息技术概述、发展
- pycharm调试FATE手册
- sap 标准委外和工序委外_SAP PP-SAP委外工序业务配置及操作手册 -
- win10计算机升级系统,教你用电脑管家升级Win10系统?升级Win10系统的简单方法
- Matlab读取Eprime数据(txt文档)