目录
准备工作
(1)创建ui界面
(2)导入头文件
一、自动提交模式
二、手动提交模式
(1)构造函数中的代码
(2) “提交”按钮的槽函数
(3)“取消”按钮的槽函数
三、条件查找
(1)ui界面
(2)“数据过滤”按钮的槽函数
(3)最终的运行效果
准备工作
(1)创建ui界面
在ui界面导入一个Table View。这个控件可以显示表格,在代码中我们通过setHeaderData()函数可以自定义每列的名称。
(2)导入头文件
需要用到以下头文件,QSqlDatabase用于连接数据库,QMessageBox用于弹出对话框,QSqlError用于显示数据库的错误信息,QSqlQuery和QSqlTableModel用于操作数据库。
#include <QWidget>
#include <QSqlDatabase>
#include <QMessageBox>
#include <QSqlError>
#include <QString>
#include <QSqlQuery>
#include <QSqlTableModel>
一、自动提交模式
在Qt窗口显示的表格中改动数据,然后点击回车,数据库中的表格中的数据就自动更新了。注意,在这里必须是敲击回车才会进行数据库的更新,如果直接用鼠标切换到其他的地方是不会更新数据库的。
//连接数据库
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("aaa2");
if(db.open()==false){
QMessageBox::warning(this,"waring",db.lastError().text());
}
//实例化model
model = new QSqlTableModel(this);
//将模型设置到视图
ui->tableView->setModel(model);
//给model设置数据表,前提条件是数据库已经打开了
model->setTable("student");
//查询表
model->select();
//设置表头
model->setHeaderData(0,Qt::Horizontal,"编号");
model->setHeaderData(1,Qt::Horizontal,"姓名");
model->setHeaderData(2,Qt::Horizontal,"年龄");
model->setHeaderData(3,Qt::Horizontal,"成绩");
二、手动提交模式
除了自动提交模式外,我们还可以引入按钮来实现手动提交模式。这样我们可以一次性修改多个值,然后再一起提交。在ui界面引入“提交”和“取消”两个按钮。
(1)构造函数中的代码
//连接数据库
QSqlDatabase db=QSqlDatabase::addDatabase("QMYSQL");
db.setHostName("127.0.0.1");
db.setUserName("root");
db.setPassword("123456");
db.setDatabaseName("aaa2");
if(db.open()==false){
QMessageBox::warning(this,"waring",db.lastError().text());
}
//实例化model
model = new QSqlTableModel(this);
//将模型设置到视图
ui->tableView->setModel(model);
//给model设置数据表,前提条件是数据库已经打开了
model->setTable("student");
//查询表
model->select();
//设置表头
model->setHeaderData(0,Qt::Horizontal,"编号");
model->setHeaderData(1,Qt::Horizontal,"姓名");
model->setHeaderData(2,Qt::Horizontal,"年龄");
model->setHeaderData(3,Qt::Horizontal,"成绩");
//设置提交模式 手动提交
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
(2) “提交”按钮的槽函数
submitAll()函数的意思是提交全部操作到数据库,也就是更新数据库了。
void DataModeForm::on_pushButton_clicked()
{
//点击提交 改动表格数据 数据库跟着一起改变
model->submitAll(); //提交 更新数据库
}
(3)“取消”按钮的槽函数
revertAll()函数的意思是取消前面的全部操作,当时点击“取消”按钮时会发现你之前做的修改全消失了。
void DataModeForm::on_pushButton_2_clicked()
{
//点击取消,改动的表格数据作废,数据库不改变
model->revertAll(); //撤销操作
model->submitAll(); //提交 更新数据库
}
三、条件查找
在查表时,我们通常需要用到条件查找,这就需要用到过滤函数了。首先需要先在ui界面增加一个linEdit作为输入文本框,然后再添加一个按钮。
(1)ui界面
(2)“数据过滤”按钮的槽函数
首先用name接收用户输入的查找条件,然后将其设置到sql语句中。注意,因为“%1”代表的是字符串型的数据,所以必须加单引号。如果“%1”代表的是整型的数据就不用单引号了。
void DataModeForm::on_pushButton_3_clicked()
{
//按姓名查找
QString name=ui->lineEdit->text();
QString sql= QString("name='%1'").arg(name);
//设置过滤条件
model->setFilter(sql);
//重新查询
model->select();
}
(3)最终的运行效果
如果想要查找name=kaw的学生,在输入框中输入kaw,然后点击“数据过滤”按钮。