【问题标题】:How do I deploy QT app (without static linking) that uses ODBC plugin?如何部署使用 ODBC 插件的 QT 应用程序(无静态链接)?
【发布时间】:2011-10-30 16:26:05
【问题描述】:

我的应用程序以这种方式使用 Qt SQL

QString servername = "SQL09.FreeMySQL.net";
QString dbname = "psiprobation";
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setConnectOptions();
QString dsn = QString("DRIVER={MySQL ODBC 5.1 Driver};SERVER=%1;DATABASE=%2;USER=jnchappell21;PASSWORD=XXXXXXX").arg(servername).arg(dbname);
db.setDatabaseName(dsn);

我的代码中也包含了这个...

a.addLibraryPath(a.applicationDirPath()+"/plugins");

“plugins”文件夹包含另一个文件夹“sqldrivers”。 “sqldrivers”内部是 myodbc5.dll、myobdc5S.dll、qsqlodbc4.dll 和 qsqlodbcd4.dll。 (注意:“plugins”文件夹与可执行文件位于同一目录中)

现在部署阶段已经到来,应用程序可以在安装 Qt 的系统上完美运行;但是,在其他系统(未安装 QT)上,即使应用程序将运行(即 GUI 打开并显示错误消息),我也无法连接到数据库。

错误信息是:“[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified QODBC3: Unable to connect”

这个问题的解决方法是什么?

【问题讨论】:

  • 显示的确切错误是什么?
  • “错误消息”不是描述性的。它只是一个显示“发生未知错误”的对话框。此对话框仅在 (!db.open()) 时触发。
  • “发生未知错误”对话框是我生成的,用于显示访问(或尝试初始访问)数据库时是否发生错误。
  • 哦 :) 我试图找出一个对话框实际上会打开以指示错误情况但它是您自己的对话框的场景?
  • 是的。你是对的。我现在正在添加一个 QMessageBox 以确定确切的错误消息。

标签: qt plugins deployment odbc


【解决方案1】:

在 Qt 中调试插件问题可能很痛苦。尝试使用addLibraryPath() 强制插件位置我从来没有取得太大成功。在我弄清楚原因之前,我发现 Qt 应用程序会在应用程序根目录中查找所涉及的插件类型的“叶子”目录。在您的情况下,只需将 sqldrivers 目录放在应用程序的根目录中(不要将其嵌套在 plugins 目录中)。

尝试确定您是否确实存在插件位置问题的一种方法是,尝试将驱动程序文件从开发机器上的位置移出(或重命名),然后查看是否遇到相同的错误。

虽然针对小部件插件,但此页面有一些plugin trouble shooting 提示。

【讨论】:

  • 感谢您分享链接。我尝试了您关于重命名/重新定位某些驱动程序文件的建议。不幸的是,我未能成功地在开发机器上重现该错误。我也浏览了链接中列出的几个项目,但还没有运气。
  • 我解决了这个问题。我在目标机器上重新安装了 ODBC 驱动程序,它似乎已经解决了这个问题。但是,我不知道为什么会导致问题。感谢您的时间和努力!
猜你喜欢
  • 2011-09-07
  • 1970-01-01
  • 2023-03-17
  • 1970-01-01
  • 2010-11-03
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多