Qt & Excel xlsx outputs
-
@J-Hilk
Remember that he gets "data source too long" even without specifying a file.@Touchoco
What does, say,QString connectionString("Driver={Microsoft Excel Driver}");
produce?P.S. This is a 100% longshot, but there's no example in the world which has the spaces you have in
Driver = {
. TryDriver={...
just in case.... -
I got differents messages by deplacing the space caracter.
With :
QString connectionString("Driver={Microsoft Excel Driver}");
or
QString connectionString("Driver={Microsoft Excel Driver (*.xls,*.xlsx,*.xlsm,*.xlsb)};Dbq=" + QString("D:\\test.xls"));
or
QString connectionString("Driver={Microsoft Excel Driver(*.xls,*.xlsx,*.xlsm,*.xlsb)};Dbq=" + QString("D:\\test.xls"));
or
QString connectionString("Driver={Microsoft Excel Driver};Dbq=" + QString("D:\\test.xls"));
or
QString connectionString("Driver ={Microsoft Excel Driver};Dbq=" + QString("D:\\test.xls"));
or
QString connectionString("Driver= {Microsoft Excel Driver};Dbq=" + QString("D:\\test.xls"));
I got :
QSqlError("0", "QODBC3: Unable to connect", "[Microsoft][Gestionnaire de pilotes ODBC] Data source not found and driver name not specified")With :
QString connectionString("Driver = {Microsoft Excel Driver};Dbq=" + QString("D:\\test.xls"));
I got :
QSqlError("0", "QODBC3: Unable to connect", "[Microsoft][Gestionnaire de pilotes ODBC] Datasource name too long") -
I assume you're using a 64Bit Qt - so do you also have installed a 64Bit Excel ODBC driver? You can check this by opening odbcad32.exe from <WinDir>\System32\ and take a look at your User DSNs if you can configure the Excel driver there.
-
@Touchoco
Well, I'm not 100%, but I do think we have found some improvement/difference. Only with extra spaces do you getDatasource name too long
. Let's not do that, as none of the examples do, and nor does your workingNative Client
one.The referenced pages gives:
To read an Excel file with ODBC (tested on Windows 7 with QT 4.7.1 and Windows 10 with QT 5.7) :
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC", "xlsx_connection"); db.setDatabaseName("DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + QString("c:\\path\\to\\your\\file\\file.xlsx")); if(db.open()) {
So, FWIW, let's stick to exactly that string, no changing in spacing or capitalization.
Meanwhile, I see @Christian-Ehrlicher has queried that you verify your ODBC Excel driver is working. I wonder whether you do not have this set up right, e.g. 32-bit only when you're using 64-bit. Like I said earlier you can check this from Windows, please follow what he has said about how to do that.
-
@Christian-Ehrlicher thank you for your help.
I got the following screen but I don't understang how I could configure the Excel driver there.
I also tried to compile my program with MinGw 32 bit : the error remain unchanged.
-
Thank you for your help.
I worked ! Sticking with exactly the same spaces to the same places. And with 32 bits compiler.
I tried to change to 64 bit compiler : KO. I tried with a very long and weird file name : it works.
Driver and dbq can be write : DRIVER, DBQ, driver, dbq, Driver, Dbq.Here is the current working code :
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); QString connectionString("DRIVER={Microsoft Excel Driver (*.xls, *.xlsx, *.xlsm, *.xlsb)};DBQ=" + QString("D:\\sabin\\Documents\\C++ et C\\C++\\BaF\\BaF\\Templates\\TEST.xls")); db.setDatabaseName(connectionString); if(db.open()) { QSqlQuery query("select * from [" + QString("Infos_adm") + "$A1:E20]"); while (query.next()) { //reading columns QString column1= query.value(0).toString(); qDebug()<<column1; } qDebug()<<"done"; db.close(); QString dbConnectionName(db.connectionName()); db.~QSqlDatabase(); QSqlDatabase::removeDatabase(dbConnectionName); } else { qDebug()<<db.lastError(); qDebug() << connectionString ; }
-
@Touchoco said in Qt & Excel xlsx outputs:
And with 32 bits compiler.
I tried to change to 64 bit compiler : KOSo my idea was wrong. Install a 64 Bit Excel if you want to use a 64Bit Qt (sad but true).
-
@Touchoco
Glad it works, but it's a shame to have to change over to 32-bit Qt app just to be able to talk ODBC to Excel.If you want to pursue this further I think it is a non-Qt issue. You would have to Google for something about how to ODBC from a 64-bit executable when I have such-and-such (probably 32-bit) Excel, or similar.