QSqlTableModel使用方法

更新时间:2023-05-12 21:30:32 阅读: 评论:0

QSqlTableModel使⽤⽅法
使⽤⼼得
连接数据库
sql查询,条件显⽰,排序
获取记录数,列数以及记录内容,字段内容
新增,修改,删除,恢复
其它
1---------------连接数据库(我⽤的access2003做实验)
在.pro⽂件添加
QT +=SQL
win32:CONFIG+=console
-
-----------------------MAIN.CPP---------------
#include <QtGui/QApplication>
#include <QSqlDataba>
#include <QSqlQuery>
#include <QDebug>
#include <QVariant>
#include <QString>
#include <QSqlTableModel>
#include <QTableView>
#include "mainwindow.h"
int main(intargc, char *argv[])
{
QApplication a(argc, argv);
// MainWindow w;感恩节文案
//w.show();
QSqlDataba db = QSqlDataba::addDataba("QODBC");
db.tDatabaName("DRIVER={Microsoft AccessDriver (*.mdb)};FIL={MS Access};DBQ=barcode.mdb;UID='';PWD=''"); bool ok = db.open();
if(ok)
{
qDebug()<<"connect ok!";
}
el
{
qDebug()<<"connect error!";
return fal;
我们一家人作文
}
();
}
2-----执⾏sql查询,条件显⽰,排序
名表排名查询:
model = newQSqlTableModel(this);
“student”);
model->tEditStrategy(QSqlTableModel::OnManualSubmit);
model->lect(); //选取整个表的所有⾏
// model->removeColumn(1); //不显⽰第⼆列,如果这时添加记录,则该属性的值添加不上
QTableView *view= new QTableView;
view->tModel(model);
view->show();
View->tEditTriggers(QAbstractItemView::NoEditTriggers); 使其不可编辑
条件:(等价于SQL语句的where)
model->tFilter(QObject::tr(“name= ‘admin’”).arg(name)); //根据姓名进⾏筛选model->lect(); //显⽰结果
排序:(等价于ORDERBY)
model->tSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列
model->lect();
model->tSort(0,Qt::DescendingOrder); //id属性,即第0列,降序排
model->lect();
3------获取记录数,列数以及记录内容,字段内容
记录数: Model->rowcount
记录值:
值=d(num).value(1).toString();
Qrecord record= QSqlRecord record = d(记录⾏数);
值=Record.value(“字段名或索引”)
字段数:
字段值:
4------新增,修改,删除,提交,撤销
新增:
int rowNum = model->rowCount();//获得表的⾏数
int id = 10;
model->inrtRow(rowNum); //添加⼀⾏
model->tData(model->index(rowNum,0),id);
//model->submitAll(); //可以直接提交
或者⽤record添加
QSqlRecord record = d();
record.tValue("nam","new");
model.inrtRecord(1,record);
修改:
⾸先⽤条件找到某⼀条记录
QSqlRecord record = d(num);
record.tValue("name",record.value("name").toString()+"2"); tablemodel.tRecord(num,record);
if(tablemodel.submitAll())
"成功!"
el
"失败!"
或者⽤下⾯⽅法⽤tData()来修改,代码如下:
model.tData(model.index(1,1),"new");
if(tablemodel.submitAll())
"成功!"
el空调不冷
"失败!"
删除:
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();//如果不删除,则撤销
}
el model->submitAll(); //否则提交,在数据库中删除该⾏
如果没有table
model.submitAll();
提交
model->databa().transaction();//开始事务操作
if (model->submitAll()) {
model->databa().commit();//提交
} el {
model->databa().rollback();//回滚
QMessageBox::warning(this,tr(“tableModel”),
梦到坐船tr(“数据库错误: %1″)
.arg(model->lastError().text()));
}
撤销
model->revertAll();
5------其它
SQL模型类-QSqlTableModel模型
QSqlTableModel类继承⾄QSqlQueryModel类,该类提供了⼀个可读写单张SQL表的可编辑数据模型,功能:修改,插⼊,删除,查询,和排序
常⽤函数
headerData ( int ction,orientation, int role= Qt::DisplayRole ) const 获取⽔平头或垂直头标题
bool tHeaderData ( int ction,orientation, const&value, int role= Qt::EditRole ) 设置⽔平头或垂直头标题
int rowCount ( const&parent= QModelIndex() ) const // 返回⾏数
int columnCount ( const&index= QModelIndex() ) const // 返回列数
virtual bool removeColumns ( int column, int count, const QModelIndex & parent = QModelIndex() ) //model->removeColumns (0)删除第⼀列
bool QSqlTableModel::submitAll (),//提交所有被修改的数据,然后修改的数据被保存在数据库中
void QSqlTableModel::revertAll () //撤销所有的修改,如果数据库已经被提交了修改,就不能通过撤销修改改回来了
virtual void revertRow ( int row ) //恢复指定⾏的改变
void QSqlTableModel::tFilter ( const QString & filter ) //筛选,按照字符串filter对数据库进⾏筛选,相当于SQL中的WHERE语句
bool QSqlTableModel::lect () //在筛选和排序的条件下,将数据库中符合要求的在mode表格中显⽰出来
void QSqlTableModel::tSort ( int column, Qt::SortOrder order ) //排序操作。按照列和Qt::SortOrder排序。Qt::SortOrder有升序和降序
bool inrtRow ( int row, const QModelIndex & parent = QModelIndex() ) //插⼊⾏
bool inrtColumn ( int column, const&parent= QModelIndex() ) // 插⼊列
model->tEditStrategy(QSqlTableModel::OnManualSubmit); //设置保存策略为⼿动提交
⼀、在QTableView中显⽰数据库中表的数据
1. QSqlTableModel *model = new QSqlTableModel(parentObject, databa); // 摘抄⾃帮助⽂档
2. model->tTable("employee");
3. model->tEditStrategy(QSqlTableModel::OnManualSubmit);
4. model->lect();
5. model->removeColumn(0); // don't show the ID
6. model->tHeaderData(0, Qt::Horizontal, tr("Name"));
7. model->tHeaderData(1, Qt::Horizontal, tr("Salary"));
8. QTableView *view = new QTableView;
9. view->tModel(model);
10. view->show();
⼆、修改QTableView中数据后的提交,加⼊事务处理
1. model->databa().transaction(); //开始事务操作
2. if (model->submitAll()) // 提交所有被修改的数据到数据库中
3. {
4. model->databa().commit(); //提交成功,事务将真正修改数据库数据
5. } el {
6. model->databa().rollback(); //提交失败,事务回滚
7. QMessageBox::warning(this, tr(“tableModel”),tr(“数据库错误: %1″).arg(model->lastError().text()));
8. }
9. model->revertAll(); //撤销修改
三、查询操作
相当于SQL语句:SELECT * FROM 表名 WHERE name = "name变量"
1. model->tFilter(QObject::tr(“name = ‘%1′”).arg(name)); //根据姓名进⾏筛选
2. model->lect(); //显⽰结果
3. for (int i = 0; i < wCount(); ++i)
4. {
5. QString name = d(i).value("name").toString();
6. // ... 在此处理每⼀条的记录
7. }
8. // 在操作⼤数据集时,建议通过索引指定字段
9. int primaryKeyIndex = d().indexOf("id");
10. for (int i = 0; i < wCount(); ++i)
11. {
动感影集12. QSqlRecord record = d(i);
13. QString name = record.value("name").toString();
14. // ... 在此处理每⼀条的记录
15. }
四、排序操作
1. model->tSort(0,Qt::AscendingOrder); //id属性,即第0列,升序排列,Qt::DescendingOrder为降序排序
2. model->lect();
五、插⼊操作
1. int rowNum = model->rowCount(); //获得表的⾏数
2. int id = 最后⼀个ID+1;
3. model->inrtRow(rowNum); //添加⼀⾏,或者⽤inrtRows(0,1),在0⾏添加1条记录,根据表的排序规则,可能移到与指定⾏不同的⾏位置上
4. model->tData(model->index(rowNum,0),id); //因为这⾥设置了ID为主键,所以必须给新⾏添加id属性值,id字段在第0列上
5. model->submitAll(); //可以直接提交
六、删除⼀条记录
⾸先要定位到待删除的⾏上
1. model.tFilter("id = 10");
2. model.lect();
3. if (wCount() == 1)
4. {
5. veRows(0,1) // 如果要删除所有满⾜条件的记录则把1改成wCount()
6. model.submitAll();
7. }
在QTableView中删除选中的⼀⾏
1. int curRow = tableView->currentIndex().row();
2. model->removeRow(curRow); //删除⼀⾏
在QTableView中删除选中的多⾏
QAbstractItemView::SelectionModelectionMode()const // 原型
QModelIndexListQItemSelectionModel::lectedIndexes()const //原型
1. QItemSelectionModel *lections = tableView->lectionModel(); //返回当前的选择模式
2. QModelIndexList lecteds = lections->lectedIndexes(); //返回所有选定的模型项⽬索引列表
六味地黄丸副作用3. foreach (QModelIndex index, lecteds)

本文发布于:2023-05-12 21:30:32,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/604668.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:修改   数据库   删除   记录
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图