点击上方“Qt学视觉”,选择“星标”公众号重磅干货,第一时间送达
想要学习的同学们还请认真阅读每篇文章,相信你一定会有所收获
1、QSqlQuery的基本用法
QSqlQuery是能执行任意SQL语句的类,如SELECT、INSERT、UPDATE、DELETE等
主要函数如下:
1、bool prepare(const QString &query)
设置准备执行的SQL语句,一般用于带参数的SQL语句
2、void bindValue(const QString &placeholder, const QVariant &val, QSql::ParamType paramType = QSql::In)
设置SQL语句中参数的值,以占位符表示参数
3、bool exec()
执行由prepare()和bindValue()设置的SQL语句
4、bool exec(const QString &query)
直接执行一个不带参数的SQL语句
5、bool isActive() const
如果成功执行了exec()函数,就返回true
6、bool isSelect() const
如果执行的SQL语句是SELECT语句,就返回true
7、QSqlRecord record() const
返回当前记录
8、QVariant value(const QString &name) const
返回当前记录名称为name的字段的值
9、bool isNull(const QString &name) const
判断一个字段是否为空,当query非活动、未定位在有效记录、无此字段或字段为空时都返回true
10、int size() const
对于SELECT语句,返回查询到的记录条数,其他语句返回-1
11、int numRowsAffected() const
返回SQL语句影响的记录条数,对于SELECT语句无定义
12、bool first()
定位到第一条记录,isActive和isSelect都为true时才有效
13、bool previous()
定位到上一条记录,isActive和isSelect都为true时才有效
14、bool next()
定位到下一条记录,isActive和isSelect都为true时才有效
15、bool last()
定位到最后一条记录,isActive和isSelect都为true时才有效
16、bool seek(int index, bool relative = false)
定位到指定序号的记录
17、int at() const
返回当前记录的序号
2、QSqlQueryModel和QSqlQuery的联合使用
QSqlQueryModel可以查询数据并作为数据模型,实现数据的显示。
QSqlQuery可以执行UPDATE、INSERT、DELETE等SQL语句实现数据的编辑修改
头文件:
#pragma once#include #include "ui_QGuiSql.h"#include #include #include #include #include "QComboboxDelegate.h"class QGuiSql : public QMainWindow{
Q_OBJECTpublic: QGuiSql(QWidget* parent = Q_NULLPTR); ~QGuiSql();private: Ui::QGuiSql ui;private: QSqlQueryModel* m_pQryModel; //数据模型 QItemSelectionModel* m_pQrySelection; //选择模型 QDataWidgetMapper* m_pQryDataMapper; //数据映射 void refreshTableView();//移动记录时刷新TableView的当前行 void updateRecord(int recNo); //更新记录private slots: //QTableView的SelectionModel的行发生了变化,进行处理 void qrySelection_currentRowChanged(const QModelIndex& current, const QModelIndex& previous); void actRecOpenDB_triggered();//打开数据表 void actRecInsert_triggered();//插入记录 void actRecEdit_triggered();//编辑记录 void actRecDelete_triggered();//删除当前记录 void actRecFirst_triggered();//首记录 void actRecPrevious_triggered();//前一条记录 void actRecNext_triggered();//后一条记录 void actRecLast_triggered();//最后一条记录 void actRecScan_triggered();//涨工资}
源文件
#include "QGuiSql.h"#include #include #include #include #include #include "QDialogData.h"#pragma execution_character_set("utf-8")QGuiSql::QGuiSql(QWidget* parent) : QMainWindow(parent){
ui.setupUi(this); // tableView显示属性设置 ui.tableView->setSelectionBehavior(QAbstractItemView::SelectItems); ui.tableView->setSelectionMode(QAbstractItemView::SingleSelection); ui.tableView->setAlternatingRowColors(true); ui.tableView->resizeColumnsToContents(); ui.tableView->horizontalHeader()->setStretchLastSection(true); connect(ui.actRecOpenDB, SIGNAL(triggered()), this, SLOT(actRecOpenDB_triggered())); connect(ui.actRecInsert, SIGNAL(triggered()), this, SLOT(actRecInsert_triggered())); connect(ui.actRecEdit, SIGNAL(triggered()), this, SLOT(actRecEdit_triggered())); connect(ui.actRecDelete, SIGNAL(triggered()), this, SLOT(actRecDelete_triggered())); connect(ui.actRecScan, SIGNAL(triggered()), this, SLOT(actRecScan_triggered())); connect(ui.actRecFirst, SIGNAL(triggered()), this, SLOT(actRecFirst_triggered())); connect(ui.actRecPrevious, SIGNAL(tri