qt 通过odbc连接excel的经验分享

// qt 通过odbc连接excel虽然少了一些东西,但是还是对于某些公司加密的系统,还是有点稳定的,至少比excel.application稳定

在创建表格之后向表格中写数据的时候,居然发现insert错误,尝试半天才发现,我表格有个字段可能是系统的关键字,于是乎我将其换了个名字就能用了此处我遇到的问题是 time 字段,能创建表格,但是不能插入

将 time 改为时间就没问题了

复制代码
void MainWindow::saveToExcel(QString qStringExcelName)
{
    //#include <QFileDialog>
    //#include <QSqlError>
    //#include <QSqlDatabase>
    //#include <QSqlQuery>
    //#include <QDateTime>
    //QT       += sql

    QString qstringSql = "";
    QString qStringExcelSheetName =ui->table_testing->item(0,2)->text()+"_"+ui->table_testing->item(0,3)->text();//Excel内sheet页的名字//QTime::currentTime().toString("hh:mm:ss")+"_"+
    qStringExcelSheetName = qStringExcelSheetName.replace(" ","");
    QSqlDatabase qsqldatabaseDB = QSqlDatabase::addDatabase("QODBC","excelexport");//连接到excel。使用QODBC的方式操作Excel,该方式同样可操作数据库
    if( !qsqldatabaseDB.isValid()){
        return;//type error
    }

    QString qstringDsn =  "DRIVER={Microsoft Excel Driver (*.xls)};"
                  "DSN='';FIRSTROWHASNAMES=1;READONLY=FALSE;CREATE_DB=";
    qstringDsn += ("\"" + qStringExcelName + "\"" + ";DBQ=" + qStringExcelName);//确定要操作的excel信息,可直接百度,有源码教程。
    qsqldatabaseDB.setDatabaseName(qstringDsn);

    if( !qsqldatabaseDB.open()){// open connection
        return;  //! db error
    }
    QSqlQuery qsqlqueryDB(qsqldatabaseDB);//查询命令

    {
            QStringList qstringlistTables = qsqldatabaseDB.tables();
            if(qstringlistTables.contains(qStringExcelSheetName)){
                //qDebug()<<11;
            }else{
                qstringSql = QString("CREATE TABLE [%1] (").arg(qStringExcelSheetName);//创建表
                qstringSql += "[序号] varchar(200),[产品名称] varchar(200),[类别] varchar(200),[参数名称] varchar(200),[参数值] varchar(200), [最小值] varchar(200),[最大值] varchar(200),[单位] varchar(200),[数据类型] varchar(200),[读写权限] varchar(200),[时间] varchar(200)";
                qstringSql += ")";
                qsqlqueryDB.prepare( qstringSql);
                if( !qsqlqueryDB.exec()) {

                }
            }

            qstringSql = QString("INSERT INTO [%1] ").arg( qStringExcelSheetName);//insert a record
            qstringSql += "(序号,产品名称,类别,参数名称,参数值,最小值,最大值,单位,数据类型,读写权限,时间)VALUES(:p1,:p2,:p3,:p4,:p5,:p6,:p7,:p8,:p9,:p10,:p11)";


            /*------------------------------------------------以下均为数据的导出----------------------------------------------------*/
            table = ui->table_testing;
            int rowcount = table->rowCount();
            for(int i=0;i<rowcount;i++){
                qsqlqueryDB.prepare( qstringSql);//excel表头名称
                qsqlqueryDB.bindValue(":p1",table->item(i,1)->text());
                qsqlqueryDB.bindValue(":p2",table->item(i,2)->text());
                qsqlqueryDB.bindValue(":p3",table->item(i,3)->text());
                qsqlqueryDB.bindValue(":p4",table->item(i,4)->text());
                qsqlqueryDB.bindValue(":p5",table->item(i,5)->text());
                qsqlqueryDB.bindValue(":p6",table->item(i,8)->text());
                qsqlqueryDB.bindValue(":p7",table->item(i,9)->text());
                qsqlqueryDB.bindValue(":p8",table->item(i,11)->text());
                qsqlqueryDB.bindValue(":p9",table->item(i,12)->text());
                qsqlqueryDB.bindValue(":p10",table->item(i,13)->text());
                qsqlqueryDB.bindValue(":p11",QTime::currentTime().toString("hh:mm:ss"));
                if( !qsqlqueryDB.exec()) { myDebug; }
            }
    }

    qsqldatabaseDB.close();
    table = nullptr;

}
复制代码

 

 

 

 

//

posted @   小城熊儿  阅读(569)  评论(0编辑  收藏  举报
编辑推荐:
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· Linux系列:如何用heaptrack跟踪.NET程序的非托管内存泄露
阅读排行:
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· 阿里巴巴 QwQ-32B真的超越了 DeepSeek R-1吗?
· 【译】Visual Studio 中新的强大生产力特性
· 张高兴的大模型开发实战:(一)使用 Selenium 进行网页爬虫
· 【设计模式】告别冗长if-else语句:使用策略模式优化代码结构
点击右上角即可分享
微信分享提示