【发布时间】:2011-11-23 01:11:43
【问题描述】:
我创建了一个执行一些 SQL 查询的 Windows Qt C++ 应用程序。此应用程序在我的开发机器上编译并正确运行。
我的 PATH 环境变量中有这些目录:
C:\oracle\product\10.2.0\db_1\bin
C:\instantclient_11_2
C:\QtSDK\mingw\bin
C:\Qt\4.7.4\bin
我想将我的应用程序作为独立的应用程序分发给其他计算机,因此我在分发中包含了这些 .dll 文件:
QtCore4.dll
QtGui4.dll
QtSql4.dll
qsqloci4.dll
mingwm10.dll
libgcc_s_dw2-1.dll
这是在我的代码中设置 QSqlDatabase 的方式:
QSqlDatabase db = QSqlDatabase::addDatabase("QOCI");
db.setHostName(hostname);
db.setPort(port);
db.setDatabaseName(sid);
db.setUserName(username);
db.setPassword(password);
bool ok = db.open();
if (ok) {
//stuff
} else {
QString dbErr = db.lastError().databaseText();
QString drErr = db.lastError().driverText();
return this->messageBox("SQL Query Failed:\n" + dbErr + "\n" + drErr);
}
当我在不是我的开发机器的计算机上运行此应用程序时,dbErr 和 drErr 设置为“未加载驱动程序”。为了让它正确运行,我还需要哪些其他 .dll 文件?
编辑:
我需要来自 C:\oracle\product\10.2.0\db_1\bin 的 oci.dll 吗?
C:\instantclient_11_2 中的 oci.dll 呢?
我尝试将这两个文件都添加到我的可执行文件的目录中,但我仍然遇到同样的错误。我是否需要这两个 .dll 文件?
【问题讨论】:
-
相对于您的 exe,qsqloci4.dll 位于何处?您可以尝试将其放在子目录“plugins/sqldrivers”中吗?它可能仍会查找此标准路径,而不是直接在与您的 exe 相同的目录中。
-
我尝试将 qsqloci4.dll 放在 executable_dir/plugins/sqldrivers 中,但仍然出现同样的错误。我在原帖中添加了关于 oci.dll 的评论。