色哟哟视频在线观看-色哟哟视频在线-色哟哟欧美15最新在线-色哟哟免费在线观看-国产l精品国产亚洲区在线观看-国产l精品国产亚洲区久久

0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

Qt學(xué)習(xí)筆記之?dāng)?shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)7

jf_78858299 ? 來(lái)源:紛紜雜談 ? 作者:CY_CHEN ? 2023-02-17 13:57 ? 次閱讀

四、導(dǎo)出EXCEL表

最后,就是導(dǎo)出excel了,創(chuàng)建一個(gè)新的類

odbcexcel.h文件

#ifndef ODBCEXCEL_H
#define ODBCEXCEL_H


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


class OdbcExcel
{
public:
    OdbcExcel();
    //將數(shù)據(jù)保存為excel
    bool static save(QString filePath,QStringList headers,QList data,QString comment="");
    //將QTableView保存為excel
    bool static saveFromTable(QString filePath,QTableView *tableView,QString comment="");
    //獲取錯(cuò)誤信息
    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="數(shù)據(jù)庫(kù)驅(qū)動(dòng)異常";
        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="無(wú)法打開(kāi)數(shù)據(jù)庫(kù)";
        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界面中創(chuàng)建一個(gè)導(dǎo)出按鍵,并在按鍵按下時(shí)調(diào)用數(shù)據(jù)庫(kù)導(dǎo)出類來(lái)完成導(dǎo)出excel功能

//導(dǎo)出
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,"注釋:無(wú)")) {
        QMessageBox::information(this,tr("提示"),tr("保存成功"));
    }
    else{
        QString msg="保存失敗!\\n\\r"+OdbcExcel::getError();
        QMessageBox::critical(this,tr("錯(cuò)誤"),tr(msg.toUtf8()));
    }
}

點(diǎn)擊導(dǎo)出后,彈出保存文件框保存文件

圖片

保存成功

圖片

然后打開(kāi)excel查看保存的數(shù)據(jù)跟Qt上的一致

圖片

OK,Qt操作數(shù)據(jù)庫(kù)就到這了。

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • API
    API
    +關(guān)注

    關(guān)注

    2

    文章

    1510

    瀏覽量

    62293
  • SQL
    SQL
    +關(guān)注

    關(guān)注

    1

    文章

    773

    瀏覽量

    44217
  • 數(shù)據(jù)庫(kù)
    +關(guān)注

    關(guān)注

    7

    文章

    3845

    瀏覽量

    64594
  • SQlite
    +關(guān)注

    關(guān)注

    0

    文章

    78

    瀏覽量

    15983
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    數(shù)據(jù)庫(kù)系統(tǒng)是什么?數(shù)據(jù)庫(kù)系統(tǒng)概念數(shù)據(jù)庫(kù)設(shè)計(jì)資料免費(fèi)下載

      什么是概念結(jié)構(gòu)設(shè)計(jì)1.將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)即概念模型的過(guò)程就是概念結(jié)構(gòu)設(shè)計(jì)2.概念結(jié)構(gòu)是各種數(shù)據(jù)模型的共同基礎(chǔ),它比
    發(fā)表于 09-07 14:34 ?1次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>系統(tǒng)是什么?<b class='flag-5'>數(shù)據(jù)庫(kù)</b>系統(tǒng)概念<b class='flag-5'>之</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)資料免費(fèi)下載

    如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)?數(shù)據(jù)庫(kù)設(shè)計(jì)介紹和需求分析及結(jié)構(gòu)設(shè)計(jì)資料概述

    數(shù)據(jù)庫(kù)設(shè)計(jì)的任務(wù)是指根據(jù)需求研制數(shù)據(jù)庫(kù)結(jié)構(gòu)并應(yīng)用 數(shù)據(jù)庫(kù)的過(guò)程。數(shù)據(jù)庫(kù)設(shè)計(jì)內(nèi)容包括數(shù)據(jù)庫(kù)
    發(fā)表于 09-13 17:05 ?0次下載
    如何進(jìn)行<b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)?<b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)介紹和需求分析及<b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>資料概述

    如何使用PowerDesigner進(jìn)行數(shù)據(jù)庫(kù)靜態(tài)結(jié)構(gòu)設(shè)計(jì)?詳細(xì)資料概述

    把用戶需求抽象為概念模型即為概念結(jié)構(gòu)設(shè)計(jì)。 概念模型除了要求能反映客觀世界并且易于理解外,還要求其易于向數(shù)據(jù)模型(如關(guān)系模型)轉(zhuǎn)化。 概念模型獨(dú)立于具體的數(shù)據(jù)庫(kù)系統(tǒng),是整個(gè)數(shù)據(jù)庫(kù)設(shè)
    發(fā)表于 09-13 17:05 ?0次下載
    如何使用PowerDesigner進(jìn)行<b class='flag-5'>數(shù)據(jù)庫(kù)</b>靜態(tài)<b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>?詳細(xì)資料概述

    數(shù)據(jù)庫(kù)靜態(tài)結(jié)構(gòu)如何設(shè)計(jì)?詳細(xì)資料任務(wù)和方法說(shuō)明

    任務(wù):實(shí)現(xiàn)數(shù)據(jù)庫(kù)設(shè)計(jì)新奧爾良方法中概念結(jié)構(gòu)設(shè)計(jì)和邏輯結(jié)構(gòu)設(shè)計(jì)
    發(fā)表于 09-27 15:32 ?1次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>靜態(tài)<b class='flag-5'>結(jié)構(gòu)</b>如何設(shè)計(jì)?詳細(xì)資料任務(wù)和方法說(shuō)明

    數(shù)據(jù)庫(kù)教程之如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)教程之如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)內(nèi)容包括了:1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述 ,2 數(shù)據(jù)庫(kù)需求分析 ,3 數(shù)據(jù)庫(kù)
    發(fā)表于 10-19 10:41 ?21次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>教程之如何進(jìn)行<b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)

    數(shù)據(jù)庫(kù)設(shè)計(jì)的七大知識(shí)點(diǎn)總結(jié)詳細(xì)資料免費(fèi)下載

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)設(shè)計(jì)的七大知識(shí)點(diǎn)總結(jié)包括了:1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述2 需求分析3 概念結(jié)構(gòu)設(shè)計(jì)4 邏輯結(jié)構(gòu)設(shè)計(jì)5 數(shù)據(jù)庫(kù)的物理
    發(fā)表于 10-19 10:41 ?0次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)的七大知識(shí)點(diǎn)總結(jié)詳細(xì)資料免費(fèi)下載

    數(shù)據(jù)庫(kù)學(xué)習(xí)入門(mén)資料如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)學(xué)習(xí)入門(mén)資料如何進(jìn)行數(shù)據(jù)庫(kù)設(shè)計(jì)主要內(nèi)容包括了:數(shù)據(jù)庫(kù)系統(tǒng)設(shè)計(jì)的1 概述2 需求分析3 概念設(shè)計(jì)4 邏輯設(shè)
    發(fā)表于 10-25 16:29 ?14次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>學(xué)習(xí)</b>入門(mén)資料<b class='flag-5'>之</b>如何進(jìn)行<b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)

    數(shù)據(jù)庫(kù)學(xué)習(xí)入門(mén)資料數(shù)據(jù)庫(kù)的概念結(jié)構(gòu)詳細(xì)資料概述

    什么是概念結(jié)構(gòu)設(shè)計(jì) 將需求分析得到的用戶需求抽象為信息結(jié)構(gòu)即概念模型的過(guò)程就是概念結(jié)構(gòu)設(shè)計(jì) 概念結(jié)構(gòu)是各種數(shù)據(jù)模型的共同基礎(chǔ),它比
    發(fā)表于 10-25 16:29 ?0次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>學(xué)習(xí)</b>入門(mén)資料<b class='flag-5'>之</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b>的概念<b class='flag-5'>結(jié)構(gòu)</b>詳細(xì)資料概述

    數(shù)據(jù)庫(kù)概念結(jié)構(gòu)是如何設(shè)計(jì)的概念結(jié)構(gòu)設(shè)計(jì)資料概述

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)概念結(jié)構(gòu)是如何設(shè)計(jì)的概念結(jié)構(gòu)設(shè)計(jì)資料概述主要內(nèi)容包括了:1 概念結(jié)構(gòu)2 概念結(jié)構(gòu)設(shè)計(jì)的方法與步驟3
    發(fā)表于 10-26 11:49 ?22次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>概念<b class='flag-5'>結(jié)構(gòu)</b>是如何設(shè)計(jì)的概念<b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>資料概述

    數(shù)據(jù)庫(kù)的設(shè)計(jì)概念總結(jié)

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)的設(shè)計(jì)概念總結(jié)主要內(nèi)容包括了:1.數(shù)據(jù)庫(kù)設(shè)計(jì)概述,2.需求分析,3.概念結(jié)構(gòu)設(shè)計(jì),4.邏輯結(jié)構(gòu)設(shè)計(jì),5.數(shù)據(jù)庫(kù)
    發(fā)表于 01-09 17:29 ?13次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>的設(shè)計(jì)概念總結(jié)

    數(shù)據(jù)庫(kù)設(shè)計(jì)開(kāi)發(fā)案例教程之數(shù)據(jù)庫(kù)設(shè)計(jì)的資料介紹

    本文檔的主要內(nèi)容詳細(xì)介紹的是數(shù)據(jù)庫(kù)設(shè)計(jì)開(kāi)發(fā)案例教程之數(shù)據(jù)庫(kù)設(shè)計(jì)的資料介紹主要內(nèi)容包括了:1 數(shù)據(jù)庫(kù)設(shè)計(jì)概述,2 需求分析,3 概念結(jié)構(gòu)設(shè)計(jì),4 邏輯
    發(fā)表于 01-11 11:20 ?17次下載
    <b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)開(kāi)發(fā)案例教程之<b class='flag-5'>數(shù)據(jù)庫(kù)</b>設(shè)計(jì)的資料介紹

    Qt學(xué)習(xí)筆記數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)1

    數(shù)據(jù)庫(kù)也是應(yīng)用程序的重要部分,一個(gè)完整的應(yīng)用程序幾乎都包含數(shù)據(jù)庫(kù)。 當(dāng)前主流的數(shù)據(jù)庫(kù)有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。 Sqlite是一款輕型的
    的頭像 發(fā)表于 02-17 11:25 ?810次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>1

    Qt學(xué)習(xí)筆記數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)2

    數(shù)據(jù)庫(kù)也是應(yīng)用程序的重要部分,一個(gè)完整的應(yīng)用程序幾乎都包含數(shù)據(jù)庫(kù)。 當(dāng)前主流的數(shù)據(jù)庫(kù)有DB2、MYSQL、OCI、ODBC、SQLITE、TDS、Oracle。 Sqlite是一款輕型的
    的頭像 發(fā)表于 02-17 11:25 ?565次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>2

    Qt學(xué)習(xí)筆記數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)5

    Qt中,Qt為SQL數(shù)據(jù)庫(kù)提供支持的基本模塊。Qt SQL的API分為不同的層: ·驅(qū)動(dòng)層 ·SQL API層 ·用戶接口層
    的頭像 發(fā)表于 02-17 13:56 ?829次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>5

    Qt學(xué)習(xí)筆記數(shù)據(jù)庫(kù)結(jié)構(gòu)設(shè)計(jì)6

    Qt中,Qt為SQL數(shù)據(jù)庫(kù)提供支持的基本模塊。Qt SQL的API分為不同的層: ·驅(qū)動(dòng)層 ·SQL API層 ·用戶接口層
    的頭像 發(fā)表于 02-17 13:57 ?551次閱讀
    <b class='flag-5'>Qt</b><b class='flag-5'>學(xué)習(xí)</b><b class='flag-5'>筆記</b><b class='flag-5'>之</b><b class='flag-5'>數(shù)據(jù)庫(kù)</b><b class='flag-5'>結(jié)構(gòu)設(shè)計(jì)</b>6
    主站蜘蛛池模板: 男人插曲视频大全免费网站 | 乌克兰成人性色生活片 | 麻豆成人久久精品二区三区网站 | 国产午夜精品久久久久婷婷 | 午夜性色一区二区三区不卡视频 | 麻豆国产自制在线观看 | 2021全国精品卡一卡二 | RUNAWAY韩国动漫免费官网版 | 国产 在线 亚洲 欧美 动漫 | 国产欧美日韩精品a在线观看高清 | 亚洲国产成人精品不卡青青草原 | 少妇伦子伦精品无码 | 久久国产精品久久国产精品 | 国产一区二区在线观看免费 | 美女与男人对肌免费网站 | 在线精品视频免费观看 | yellow免费观看完整版直播 | 蜜桃精品成人影片 | 一抽一出BGM免费3分钟 | 亲胸吻胸添奶头GIF动态图免费 | 国产在线精品视频免费观看 | 亚洲综合色在线视频久 | 日韩亚洲不卡在线视频 | 春暖花开 性 欧洲 | 高清 国产 在线 亚洲 | 国产老师开裆丝袜喷水漫画 | 秋霞特色大片18岁入口 | 91天堂国产在线 在线播放 | 99手机在线视频 | 天天狠狠弄夜夜狠狠躁·太爽了 | 狠狠综合久久综合88亚洲 | 忘忧草在线影院www日本 | 久久嫩草影院网站 | 1级午夜影院费免区 | old老男人野外树林tv | 青青草狠狠干 | 97精品免费视频 | 亚洲精品视频免费在线观看 | 国产亚洲精品久久久久久禁果TV | 亚洲 日韩 自拍 视频一区 | 女人高潮时一吸一夹 |