我正在尝试使用Linux中的QT打开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
现在如何在 Linux ?
中使用Qt打开mdb-file在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
什么事?
答案 0 :(得分: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部分中的其他一些参数,那么这对您有用。我之前没有使用过Easysoft ODBC-ACCESS所以我不能100%确定如何为这个驱动程序格式化DSN。如果您还没有解释如何使用isql测试ODBC DSN连接,请阅读here。如果您需要进一步的帮助,请告诉我,我会看到我能做些什么来帮助您。
答案 1 :(得分: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
最后发送电子邮件至support@easysoft.com并向他们索取最新版本的驱动程序。