2

我正在尝试在 Linux 中使用 QT 打开 MS Access db 文件。所以,我已经为 qt 安装了 odbc 插件:

sudo apt-get install libqt4-sql-odbc

现在有2个文件qt4/plugins/sqldrivers目录:libqodbc.so & libqsqlite.so

所以,我尝试在我的项目中使用 ODBC 插件。有连接功能:

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

但应用程序显示错误:

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

我应该如何解决它?

4

2 回答 2

1

对 setDatabaseName 的调用以 ODBC 函数 SQLDriverConnect 结束。SQLDriverConnect 定义了许多属性,您可以设置这些属性来声明您正在使用的 ODBC 驱动程序以及如何使用它,例如 DRIVER。您告诉 unixODBC 驱动程序管理器加载驱动程序“Microsoft Access Driver (*.mdb, *.accdb)”,但它找不到该驱动程序。

在 unixODBC 中,驱动程序通常在 odbcinst.ini 文件中定义,您通常可以使用命令“odbcinst -j”找到该文件。你会发现这篇文章很有用。

您不太可能拥有如您所显示的那样命名的 Microsoft Access 驱动程序,因为这通常是仅在 Windows 上可用的 MS Access 驱动程序的名称。

据我所知,只有 2 种方法可以使用 ODBC 直接从 Linux 访问 MS Access DB 1) mdbtools(旧且不完整但免费) 2) Easysoft MS Access ODBC 驱动程序,它是一个完整的 ODBC 驱动程序,但不是免费的。

于 2013-03-18T09:27:47.063 回答
0

除了我使用的是 Windows 之外,我的项目也遇到了同样的问题。我认为这会对您有所帮助:只需将您的驱动程序更改为此代码(取自 QT 网站):

db.setDatabaseName("DRIVER={Microsoft Access Driver (*.mdb)};FIL={MS Access};DBQ=myaccessfile.mdb");
于 2015-01-28T14:06:24.463 回答