使用QODBC/QODBC3 Qt驱动程序连接Excel文件

6

如何使用QODBC/QODBC3 Qt驱动程序正确连接Excel文件?

首先,在命令提示符中构建一个驱动程序,如下:

>cd %QTPATH%\src\plugins\sqldrivers\odbc

>qmake odbc.pro

>nmake

然后在 %QTPATH%\plugins\sqldrivers 中创建了 qsqlodbc4.dll 文件。

我使用了以下代码:

    #include <QApplication>
    #include <QtGui>
    #include <QtSql>
    
    int main(int argc, char** argv)
    {
        QApplication app(argc, argv);
        //QComboBox myCombo;
    
        //excel stuff
        QSqlDatabase dbExcel = QSqlDatabase::addDatabase("QODBC","dbExcel");
            // i thought mayde that would work
           // dbExcel.setDatabaseName("C:\databases\test.xlsx");

           //i tried connection string too
          dbExcel.setDatabaseName(QString("DRIVER={Microsoft Excel Driver (*.xlsx)}; READONLY=FALSE; FIL={MS Excel}; DBQ=C:\databases\test.xlsx"));
        
        if(!dbExcel.open())
        {
            QSqlError er = dbExcel.lastError();
            QMessageBox::information(0, "Error", er.text());
        }
    
    
        
         //...................
    
        
    
        return app.exec();
  }

我发现了这个错误(它的意思是:

[Microsoft][ODBC driver manager] Data source not found and default driver not set. QODBC3: Unable to connect

)

错误

更新

另外,它表示驱动程序可用。

QSqlDatabase: available drivers: QIBASE QSQLITE QODBC3 QODBC

你肯定需要使用DSN调用“dbExcel.setDatabaseName(QString("DRIVER={Mic...”。 - Sebastian Lange
@SebastianLange,我尝试了这样的代码: dbExcel.setDatabaseName(QString("DRIVER={Microsoft Excel Driver (*.xlsx)}; READONLY=FALSE; FIL={MS Excel}; DBQ=C:\databases\test.xlsx"));但是它没有起作用。 同时,我在代码中将其取消注释,以免再让人困惑 :) - DanilGholtsman
1
@Rachael 嗯,据我记得,我使用了 QAxObject 工具 http://qt-project.org/wiki/Using_ActiveX_Object_in_QT http://www.qtforum.org/article/22557/activeqt-excel.html - DanilGholtsman
1
啊!你让我的周末变得美好。谢谢你。又有一个好奇的问题。你是否在使用QT和MS SQL,如果是,你是如何成功连接到它而不使用ODBC的? - Rachael
ODBC 对于 test.xls 文件对我来说是有效的,但对于 test.xlsx 文件则无效。我遇到了与您相同的 test.xlsx 错误。使用 Qt 5.5.1。 - SketchBookGames
显示剩余5条评论
1个回答

0

错误的写法:DBQ=C:\databases\test.xlsx

正确的写法:在地址中使用双 \


你的回答可以通过提供更多支持信息来改进。请编辑以添加进一步的细节,例如引用或文档,以便他人可以确认你的答案是正确的。您可以在帮助中心中找到有关如何编写良好答案的更多信息。 - Community

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接