2013-03-22 89 views
0

我想在Linux中用QT打開MS Access數據庫文件。在Linux中打開MS Access文件

因此,我安裝了帶有unixODBC的Easysoft MS Access ODBC驅動程序。還有就是我的odbc.ini文件:

[Easysoft ODBC-ACCESS] 
Description = MS Acess db driver 
Driver = /usr/local/easysoft/access/lib/libesmdb.so 
Setup = /usr/local/easysoft/access/lib/libesmdbS.so 

並有ODBCINST.INI文件:

[ACCESS_SAMPLE] 
Driver = Easysoft ODBC-ACCESS 
mdbfile = /home/user/personal_base.mdb 

而且,我已經安裝了Qt的ODBC插件:

sudo apt-get install libqt4-sql-odbc 

現在怎麼能我用Qt打開mdb-file Linux

在MS Windows中我做這樣的方式:

bool createConnection() 
{ 
    QSqlDatabase db = QSqlDatabase::addDatabase("QODBC"); 
    db.setDatabaseName("Driver={Microsoft Access Driver (*.mdb, *.accdb)};DSN='';DBQ=C:/personal_base.mdb"); 
    if (!db.open()) { 
     QMessageBox::warning(0, QObject::tr("Database Error"), db.lastError().text()); 
     return false; 
    } 
    return true; 
} 

我嘗試db.setDataBaseName改變

... 
db.setDatabaseName("Driver={Easysoft ODBC-ACCESS};DSN='ACCESS_SAMPLE'"); 
... 

但它返回一個錯誤:

[unixODBC][Driver Manager]Data source name not found, and no default driver specified QODBC3: Unale to connect 

有什麼物?

+1

看來Microsoft Access可能不是跨平臺數據庫的最佳解決方案。如果你想用你的應用程序分發你的數據庫,你應該看看SQLite。否則,請使用MySQL或Oracle等服務器。 – 2013-03-22 18:02:32

+0

你是對的。但是,很抱歉地說,我不能在我的問題中使用任何其他解決方案。 – 2013-03-22 18:54:38

回答

0

下面是一些代碼,我使用這些代碼構建適用於從Mac,Linux和Windows連接到SQL Server的DSN。我相信你的連接字符串在你的代碼中是不正確的。也許它會幫助你開始。

QString SQLServerProvider::buildDSN(QString server, QString database, QString username, QString password) 
{ 
#ifdef Q_WS_MACX 
    QString dsn = QString("DRIVER=/usr/local/lib/libtdsodbc.so;SERVER=%1;TDS_VERSION=8pClient;DATABASE=%2;PORT=1433;UID=%3;PWD=%4;").arg(server).arg(database).arg(username).arg(password); 
#endif 

#ifdef Q_WS_X11 
    QString dsn = QString("DRIVER={FreeTDS};SERVER=%1;TDS_VERSION=8.0;PORT=1433;DATABASE=%2;UID=%3;PWD=%4;").arg(server).arg(database).arg(username).arg(password); 
#endif 

#ifdef Q_WS_WIN 
    QString dsn = QString("DRIVER={SQL SERVER};SERVER=%1;DATABASE=%2;UID=%3;PWD=%4;").arg(server).arg(database).arg(username).arg(password); 
#endif 
    return dsn; 
} 

我知道你正在試圖連接到Microsoft Access數據庫,但也許如果更換freetds的,並在Q_WS_X11部分其他幾個paraneters,這會爲你工作。我之前沒有使用過Easysoft ODBC-ACCESS,所以我不能100%確定如何爲此驅動程序格式化DSN。如果您尚未解釋如何使用isql測試ODBC DSN連接,請閱讀here。如果您需要進一步的幫助,請告訴我,我會看看我可以做些什麼來幫助。

+0

感謝您的回答。但最終我決定用'-qt-sql-odbc'配置密鑰重新構建Qt SDK – 2013-03-23 22:05:59

+0

很高興您能夠使其工作。 – 2013-03-25 12:47:18

0

試着改變你的DSN-less連接看: -

Driver=/usr/local/easysoft/access/lib/libesmdb.so;mdbfile=/home/user/personal_base.mdb 

添加您的機庫路徑: -

export LD_LIBRARY_PATH=/usr/local/easysoft/lib:/usr/local/easysoft/access/lib:/usr/local/easysoft/unixODBC/lib:$LD_LIBRARY_PATH 

最後電子郵件[email protected]並要求他們最新驅動程序的版本。