【发布时间】:2018-11-21 19:00:01
【问题描述】:
我正在使用带有 32 位 MinGW Qt 的 Qt 的 MySQL 驱动程序。这是有效的:
QSqlDatabase db = QSqlDatabase::addDatabase("QMYSQL");
db.setDatabaseName("MyDatabase");
//SETUP
if (db.open) {
QSqlQuery q;
if (q.prepare("SELECT id FROM Things WHERE parent_id = :pid")) {
q.bindValue(":pid", 1);
qDebug() << boundValues();
if (q.exec) {
//DO STUFF
} } }
但现在我使用的是 64 位 MSVS Qt,我需要使用 MySQL ODBC 连接器。我已经设置并更改了代码以反映这一点:
QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};DATABASE=MyDatabase;");
这就是我所做的一切。没有 WHERE 子句的 SELECT 语句按预期工作,我可以像以前一样通过 QSqlTableModel 操作数据库。
只是绑定停止工作......我的意思是绑定值在那里并且 qDebug 返回:
QMap((":pid", QVariant(int, 1)))
但是现在查询在 exec 之后没有返回任何行;但也没有错误......这也有效:
q.prepare(QString("SELECT id FROM Things WHERE parent_id = '%1'").arg(1))
有什么帮助吗?
【问题讨论】:
-
我不熟悉
QODBC,但是你读过doc.qt.io/qt-5/sql-driver.html#qodbc吗? -
@TrebuchetMS 你有什么特别的想法吗?我在那里看不到任何有用的信息... ;c
-
嗯...可能只是问题中的一个错字,但是:
QMap((":vid", QVariant(int, 1)))读取:vip而不是:pid,如第一个代码 sn-p... 正确吗? -
@cbuchart 是的,只是一个错字,它是“parent_id”的快捷方式,在我的应用程序中,父级被命名为“venue”,所以“venue_id”是“vid”,仅此而已。这不是问题,如果与 QMySQL 驱动程序连接,该应用程序正在运行。
-
使用 MSVC /64 Qt 套件,使用 MySQL ODBC 64 位驱动程序,named 和 positional 占位符都可以正常工作。
标签: mysql qt odbc qsqlquery qsqltablemodel