我在QODBC驱动程序中遇到以下问题:
bool Dialog::createOdbcConnection(QSqlDatabase * db, QString odbcName,QString user,QString pass)
{
db = new QSqlDatabase();
db->addDatabase("QODBC");
db->setDatabaseName(odbcName);
if(!user.isEmpty())
db->setUserName(user);
if(!pass.isEmpty())
db->setPassword(pass);
qDebug() << QSqlDatabase :: drivers();
if (!db->open())
{
QMessageBox mgs;
qDebug() << db->lastError().text();
mgs.setText(db->lastError().text());
mgs.exec();
return false;
}
return true;
}
qDebug() << QSqlDatabase :: drivers();
返回("QSQLITE", "QODBC3", "QODBC")
,但程序无法打开我的数据库,db-&gt; open()返回 false ,错误为"Driver not loaded Driver not loaded"
答案 0 :(得分:1)
在createOdbcConnection-Method中使用QSqlDatabase参数是什么意思? 我宁愿从那里删除它,在类定义中定义一个QSqlDatabase对象:
private:
QSqlDatabase db_;
并在Class-Constructor中初始化它:
db_ = QSqlDatabase::addDatabase("QODBC");
这应该有用!
答案 1 :(得分:0)
我看到此问题已解决,但我正在添加注释,以防有人遇到与我相同的问题并在未加载驱动程序时寻找解决方案,但所描述的解决方案还不够。< /p>
这取决于您在哪里编译并打算使用与 ODBC 相关的 Qt 代码。我遇到了类似的问题。
我的代码在 Windows 上运行良好,但在其他地方 (Linux) 编译时返回错误。
在 Linux 上运行编译后的代码时会遇到麻烦,因为驱动程序 libsqlodbc.so 即使存在于 /plugins/sqldriver 目录中,它也依赖于某些必须独立安装的特定库。
>您可以通过
查看缺少哪个库ldd ./path-to-libsqlodbc.so/libsqlodbc.so
您可以查看是否缺少任何其他库以使您的二进制文件运行
ldd ./path-to-your-binary-file/name-of-your-binary-file
使用以下信息在您的 Linux 上安装 ODBC(如果需要): installing odbc driver on linux