0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

Qt学习笔记之数据库结构设计6

jf_78858299 来源:纷纭杂谈 作者:CY_CHEN 2023-02-17 13:57 次阅读

编写好编辑的接口函数后,在数据库操作文件中调用:

sqlite_sqlquerymodel_edit.h

#ifndef SQLITE_SQLQUERYMODEL_EDIT_H
#define SQLITE_SQLQUERYMODEL_EDIT_H


#include 
#include 
#include "editquerymodel.h"
#include 
#include 


QT_BEGIN_NAMESPACE
namespace Ui { class sqlite_sqlquerymodel_edit; }
QT_END_NAMESPACE


class sqlite_sqlquerymodel_edit : public QWidget
{
    Q_OBJECT


public:
    sqlite_sqlquerymodel_edit(QWidget *parent = nullptr);
    ~sqlite_sqlquerymodel_edit();


private:
    Ui::sqlite_sqlquerymodel_edit *ui;
    QSqlDatabase db;
};
#endif // SQLITE_SQLQUERYMODEL_EDIT_H

sqlite_sqlquerymodel_edit.c

#include "sqlite_sqlquerymodel_edit.h"
#include "ui_sqlite_sqlquerymodel_edit.h"


sqlite_sqlquerymodel_edit::sqlite_sqlquerymodel_edit(QWidget *parent)
    : QWidget(parent)
    , ui(new Ui::sqlite_sqlquerymodel_edit)
{
    ui->setupUi(this);


    //1、根据数据库类型来连接数据库
    db = QSqlDatabase::addDatabase("QSQLITE");
    db.setDatabaseName("compary.db");
    //2、打开数据库
    if(!db.open())
    {
        qDebug() << "open error" << db.lastError();
    }


    //3、根据需求,创建数据库所需要表
    QSqlQuery query;


    /***
     * 员工表:staff
     * 字段名有 id name age address salary
     * */
    QString sqlCreateTable = QString ("create table staff(id integer primary key autoincrement,"
                                      "name varchar(20),"
                                      "age int,"
                                      "address varchar(50),"
                                      "salary int);");
    if(!query.exec(sqlCreateTable))
    {
        qDebug() << "create table" << db.lastError();
    }


//    QString sqlInsert = QString("insert into staff(name,age,address,salary)"
//                                "values('张三',20,'广州市天河区',12000);");
//    if(!query.exec(sqlInsert))
//    {
//        qDebug() << "Error insert into data" << db.lastError();
//    }


    //1、创建模型对象
    editQueryModel* model = new editQueryModel;
    model->setQuery("SELECT id,name,age,address,salary FROM staff");
    model->setHeaderData(0,Qt::Horizontal,"ID");
    model->setHeaderData(1,Qt::Horizontal,"Name");
    model->setHeaderData(2,Qt::Horizontal,"Age");
    model->setHeaderData(3,Qt::Horizontal,"Address");
    model->setHeaderData(4,Qt::Horizontal,"Salary");


    //2、创建表格控件
    QTableView *view = new QTableView(ui->tableView);
    view->setFixedSize(QSize(this->width(),this->height()));
    view->setModel(model);
    view->show();
}


sqlite_sqlquerymodel_edit::~sqlite_sqlquerymodel_edit()
{
    delete ui;
}

运行程序,可以看到数据库表格,然后Name所在列也是可以进行修改的。

图片

三、QSqlTableModel实现数据表的读写

QSqlQueryModel实现读写是通过重写虚函数实现的,需要创建模型,但是对于一般数据库的应用,是需要导出为excel来做后续的数据保存或者数据处理的,这种创建模型的方式导出excel相对QSqlTableModel来说,就没有那么方便了,因为QSqlTableModel提供了基于单个数据表的读写模型,可以很方便的进行操作。

QSqlTableModel显示数据库:

//QSqlTableModel
model = new QSqlTableModel(this);
model->setTable("staff");
model->setEditStrategy(QSqlTableModel::OnManualSubmit);
//不显示第二列
//model->removeColumn(1);
//查询整张表
model->select();
ui->tableView->setModel(model);

运行程序,可以看到数据库信息已经显示在Qt页面中

图片

整个表格的数据都是可以编辑的,但是编辑过后,在下一次运行程序时,会发现数据其实并没有被修改。所以如果想要进行编辑,需要添加另外的提交修改、撤销修改、删除当前选定行操作。

void sqlite_sqlquerymodel_edit::on_pushButton_commit_clicked()
{
    //开启事务
    model->database().transaction();
    if (model->submitAll())//提交所有更改
    {
        //提交事务
        model->database().commit();
    }
    else
    {
        //回滚事务
        model->database().rollback();
        QMessageBox::warning(this, tr("TableView"), tr("数据库错误: %1").arg(model->lastError().text()));
    }
}


void sqlite_sqlquerymodel_edit::on_pushButton_undo_clicked()
{
    model->revertAll();
}


void sqlite_sqlquerymodel_edit::on_pushButton_delete_clicked()
{
    //获取选中的行
    int curRow = ui->tableView->currentIndex().row();
    //删除该行
    model->removeRow(curRow);
    int ret = QMessageBox::warning(this, tr("删除当前行"), tr("你确定要删除该行吗"), QMessageBox::Yes | QMessageBox::No);
    if (ret == QMessageBox::Yes)
    {
        //删除该行 提交到数据库
        model->submitAll();
    }
    else
    {
        //不删除  撤销操作
        model->revertAll();
    }
}

编辑了表格,再点击提交,下次运行程序时,可以看到数据已经被修改了。如果我们编辑了表格后,又不想提交,就可以点击撤销按键,所有修改了的数据就会恢复回未编辑之前的状态。如果想要删除某一行数据,点击删除选中行,就可以删除了。

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • SQL
    SQL
    +关注

    关注

    1

    文章

    760

    浏览量

    44082
  • 数据库
    +关注

    关注

    7

    文章

    3769

    浏览量

    64292
收藏 人收藏

    评论

    相关推荐

    数据库系统是什么?数据库系统概念数据库设计资料免费下载

      什么是概念结构设计1.将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计2.概念结构是各种数据模型的共同基础,它比
    发表于 09-07 14:34 1次下载
    <b class='flag-5'>数据库</b>系统是什么?<b class='flag-5'>数据库</b>系统概念<b class='flag-5'>之</b><b class='flag-5'>数据库</b>设计资料免费下载

    如何进行数据库设计?数据库设计介绍和需求分析及结构设计资料概述

    数据库设计的任务是指根据需求研制数据库结构并应用 数据库的过程。数据库设计内容包括数据库
    发表于 09-13 17:05 0次下载
    如何进行<b class='flag-5'>数据库</b>设计?<b class='flag-5'>数据库</b>设计介绍和需求分析及<b class='flag-5'>结构设计</b>资料概述

    如何使用PowerDesigner进行数据库静态结构设计?详细资料概述

    把用户需求抽象为概念模型即为概念结构设计。 概念模型除了要求能反映客观世界并且易于理解外,还要求其易于向数据模型(如关系模型)转化。 概念模型独立于具体的数据库系统,是整个数据库
    发表于 09-13 17:05 0次下载
    如何使用PowerDesigner进行<b class='flag-5'>数据库</b>静态<b class='flag-5'>结构设计</b>?详细资料概述

    数据库系统如何进行设计?详细方法资料概述

    设计。许多科学家认为数据库设计应分6个阶段进行:需求分析、概念结构设计、逻辑结构设计、物理结构设计数据
    发表于 09-26 15:15 12次下载
    <b class='flag-5'>数据库</b>系统如何进行设计?详细方法资料概述

    数据库静态结构如何设计?详细资料任务和方法说明

    任务:实现数据库设计新奥尔良方法中概念结构设计和逻辑结构设计
    发表于 09-27 15:32 1次下载
    <b class='flag-5'>数据库</b>静态<b class='flag-5'>结构</b>如何设计?详细资料任务和方法说明

    数据库教程之如何进行数据库设计

    本文档的主要内容详细介绍的是数据库教程之如何进行数据库设计内容包括了:1 数据库设计概述 ,2 数据库需求分析 ,3 数据库
    发表于 10-19 10:41 21次下载
    <b class='flag-5'>数据库</b>教程之如何进行<b class='flag-5'>数据库</b>设计

    数据库设计的七大知识点总结详细资料免费下载

    本文档的主要内容详细介绍的是数据库设计的七大知识点总结包括了:1 数据库设计概述2 需求分析3 概念结构设计4 逻辑结构设计5 数据库的物理
    发表于 10-19 10:41 0次下载
    <b class='flag-5'>数据库</b>设计的七大知识点总结详细资料免费下载

    数据库学习入门资料数据库的概念结构详细资料概述

    什么是概念结构设计 将需求分析得到的用户需求抽象为信息结构即概念模型的过程就是概念结构设计 概念结构是各种数据模型的共同基础,它比
    发表于 10-25 16:29 0次下载
    <b class='flag-5'>数据库</b><b class='flag-5'>学习</b>入门资料<b class='flag-5'>之</b><b class='flag-5'>数据库</b>的概念<b class='flag-5'>结构</b>详细资料概述

    数据库概念结构是如何设计的概念结构设计资料概述

    本文档的主要内容详细介绍的是数据库概念结构是如何设计的概念结构设计资料概述主要内容包括了:1 概念结构2 概念结构设计的方法与步骤3
    发表于 10-26 11:49 22次下载
    <b class='flag-5'>数据库</b>概念<b class='flag-5'>结构</b>是如何设计的概念<b class='flag-5'>结构设计</b>资料概述

    数据库的设计概念总结

    本文档的主要内容详细介绍的是数据库的设计概念总结主要内容包括了:1.数据库设计概述,2.需求分析,3.概念结构设计,4.逻辑结构设计,5.数据库
    发表于 01-09 17:29 13次下载
    <b class='flag-5'>数据库</b>的设计概念总结

    数据库设计开发案例教程之数据库设计的资料介绍

    本文档的主要内容详细介绍的是数据库设计开发案例教程之数据库设计的资料介绍主要内容包括了:1 数据库设计概述,2 需求分析,3 概念结构设计,4 逻辑
    发表于 01-11 11:20 17次下载
    <b class='flag-5'>数据库</b>设计开发案例教程之<b class='flag-5'>数据库</b>设计的资料介绍

    Qt学习笔记数据库结构设计1

    数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。 当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。 Sqlite是一款轻型的
    的头像 发表于 02-17 11:25 742次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>1

    Qt学习笔记数据库结构设计2

    数据库也是应用程序的重要部分,一个完整的应用程序几乎都包含数据库。 当前主流的数据库有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。 Sqlite是一款轻型的
    的头像 发表于 02-17 11:25 524次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>2

    Qt学习笔记数据库结构设计5

    Qt中,Qt为SQL数据库提供支持的基本模块。Qt SQL的API分为不同的层: ·驱动层 ·SQL API层 ·用户接口层
    的头像 发表于 02-17 13:56 783次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>5

    Qt学习笔记数据库结构设计7

    Qt中,Qt为SQL数据库提供支持的基本模块。Qt SQL的API分为不同的层: ·驱动层 ·SQL API层 ·用户接口层
    的头像 发表于 02-17 13:57 521次阅读
    <b class='flag-5'>Qt</b><b class='flag-5'>学习</b><b class='flag-5'>笔记</b><b class='flag-5'>之</b><b class='flag-5'>数据库</b><b class='flag-5'>结构设计</b>7