2013-03-22 129 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]并要求他们最新驱动程序的版本。