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

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

3天内不再提示

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

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

四、导出EXCEL表

最后,就是导出excel了,创建一个新的类

odbcexcel.h文件

#ifndef ODBCEXCEL_H
#define ODBCEXCEL_H


#include 
#include 
#include 
#include 
#include 
#include 


class OdbcExcel
{
public:
    OdbcExcel();
    //将数据保存为excel
    bool static save(QString filePath,QStringList headers,QList data,QString comment="");
    //将QTableView保存为excel
    bool static saveFromTable(QString filePath,QTableView *tableView,QString comment="");
    //获取错误信息
    QString static getError(){return error;}
private:
    void static printError( QSqlError error);
    bool static insert(QSqlQuery& query, QString sheetName, QStringList slist);
    static QString error;
};
#endif // ODBCEXCEL_H

odbcexcel.c

#include "odbcexcel.h"


#include "odbcexcel.h"
#include 


OdbcExcel::OdbcExcel()
{
}
QString OdbcExcel::error;


bool OdbcExcel::save(QString filePath, QStringList headers, QList data,QString comment)
{
    QString sheetName = "Sheet1";


    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC","excelexport");
    if( !db.isValid())
    {
        error="数据库驱动异常";
        return false;   //! type error
    }


    QString dsn = "DRIVER={Microsoft Excel Driver (*.xls)};"
            "DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=\""+filePath+"\\";DBQ="+filePath;
    db.setDatabaseName( dsn);


    // open connection
    if( !db.open())
    {
        error="无法打开数据库";
        return false;  //! db error
    }


    QSqlQuery query(db);
    QString sql;


    // drop the table if it's already exists
    sql = QString("DROP TABLE [%1]").arg(sheetName);
    query.exec( sql);
    //create the table (sheet in Excel file)
    sql = QString("CREATE TABLE [%1] (").arg(sheetName);
    foreach (QString name, headers) {
        sql +=QString("[%1] varchar(200)").arg(name);
        if(name!=headers.last())
            sql +=",";
    }
    sql += ")";
    query.prepare( sql);
    if( !query.exec()) {
        OdbcExcel::printError( query.lastError());
        db.close();
        return false;
    }
    foreach (QStringList slist, data) {
        insert(query,sheetName,slist);
    }


    if(!comment.isEmpty())
    {
        QStringList slist;
        slist<for(int i=0,n=headers.size()-1;i<n;i++)
        {
            slist<<"";
        }
        insert(query,sheetName,slist);
    }


    db.close();
    return true;
}


bool OdbcExcel::saveFromTable(QString filePath,QTableView *tableView, QString comment)
{
    QAbstractItemModel* model=tableView->model();
    const int column=model->columnCount();
    const int row=model->rowCount();


    //header
    QStringList headers;
    for(int i=0;i//隐藏列
        if(tableView->isColumnHidden(i))
            continue;
        headers<headerData(i,Qt::Horizontal).toString();
    }


    //data
    QStringList list;
    QList data;
    for(int i=0;iif(model->index(i,0).data().isNull())
            continue;
        list.clear();
        for(int j=0;j//隐藏列
            if(tableView->isColumnHidden(j))
                continue;
            list<index(i,j).data().toString();
        }
        data<<list;
    }
    return OdbcExcel::save(filePath,headers,data,comment);
}


void OdbcExcel::printError(QSqlError error)
{
    QString sqlerr = error.text();
    error=sqlerr;
    qCritical()<query, QString sheetName, QStringList slist)
{
    QString sSql = QString("INSERT INTO [%1] VALUES(").arg( sheetName);
    for(int i=0,n=slist.size();i<n;i++)
    {
        sSql+=QString(":%1").arg(i);
        if(i!=n-1)
            sSql+=",";
        else
            sSql+=")";
    }
    query.prepare( sSql);
    for(int i=0,n=slist.size();i<n;i++)
    {
        query.bindValue(QString(":%1").arg(i),slist.at(i));
    }
    if( !query.exec()) {
        printError( query.lastError());
        return false;
    }
    return true;
}

然后在UI界面中创建一个导出按键,并在按键按下时调用数据库导出类来完成导出excel功能

//导出
void sqlite_sqlquerymodel_edit::on_pushButton_export_clicked()
{
    QFileDialog dlg;
    dlg.setAcceptMode(QFileDialog::AcceptSave);
    //  Qt 5
    dlg.setDirectory(QStandardPaths::writableLocation(QStandardPaths::DesktopLocation));
    //  Qt 4
    //  dlg.setDirectory(QDesktopServices::storageLocation(QDesktopServices::DesktopLocation));
    dlg.setNameFilter("*.xls");
    dlg.selectFile(QDate::currentDate().toString("yyyy-MM-dd.xls"));
    if(dlg.exec()!= QDialog::Accepted)
        return;
    QString filePath=dlg.selectedFiles()[0];
    if(OdbcExcel::saveFromTable(filePath,ui->tableView,"注释:无")) {
        QMessageBox::information(this,tr("提示"),tr("保存成功"));
    }
    else{
        QString msg="保存失败!\\n\\r"+OdbcExcel::getError();
        QMessageBox::critical(this,tr("错误"),tr(msg.toUtf8()));
    }
}

点击导出后,弹出保存文件框保存文件

图片

保存成功

图片

然后打开excel查看保存的数据跟Qt上的一致

图片

OK,Qt操作数据库就到这了。

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

    关注

    2

    文章

    1523

    浏览量

    62516
  • SQL
    SQL
    +关注

    关注

    1

    文章

    775

    浏览量

    44313
  • 数据库
    +关注

    关注

    7

    文章

    3857

    浏览量

    64808
  • SQlite
    +关注

    关注

    0

    文章

    80

    浏览量

    16048
收藏 人收藏

    评论

    相关推荐

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

      什么是概念结构设计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>?详细资料概述

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

    任务:实现数据库设计新奥尔良方法中概念结构设计和逻辑结构设计
    发表于 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>设计的七大知识点总结详细资料免费下载

    数据库学习入门资料如何进行数据库设计

    本文档的主要内容详细介绍的是数据库学习入门资料如何进行数据库设计主要内容包括了:数据库系统设计的1 概述2 需求分析3 概念设计4 逻辑设
    发表于 10-25 16:29 14次下载
    <b class='flag-5'>数据库</b><b class='flag-5'>学习</b>入门资料<b class='flag-5'>之</b>如何进行<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 843次阅读
    <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 585次阅读
    <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 862次阅读
    <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学习笔记数据库结构设计6

    Qt中,Qt为SQL数据库提供支持的基本模块。Qt SQL的API分为不同的层: ·驱动层 ·SQL API层 ·用户接口层
    的头像 发表于 02-17 13:57 569次阅读
    <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>6