gpt4 book ai didi

mysql - QSqlQuery::prepare + MySQL ODBC 连接器

转载 作者:可可西里 更新时间:2023-11-01 06:34:07 25 4
gpt4 key购买 nike

我在 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 连接器。我已经设置并更改了代码以反射(reflect)这一点:

QSqlDatabase db = QSqlDatabase::addDatabase("QODBC");
db.setDatabaseName("Driver={MySQL ODBC 8.0 Unicode Driver};DATABASE=MyDatabase;");

这就是我所做的。没有 WHERE 子句的 SELECT 语句按预期工作,我可以像以前一样通过 QSqlTableModel 操作数据库。

只是绑定(bind)停止工作了...我的意思是绑定(bind)值在那里并且 qDebug 返回:

QMap((":pid", QVariant(int, 1)))

但是现在查询在 exec 之后没有返回任何行;但也没有错误......这也有效:

q.prepare(QString("SELECT id FROM Things WHERE parent_id = '%1'").arg(1))

有什么帮助吗?

最佳答案

MySQL 5 在 SQL 级别引入了存储过程支持,但没有 API 来控制 IN、OUT 和 INOUT 参数。因此,必须使用 SQL 命令而不是 QSqlQuery::bindValue() 来设置和读取参数。

尽量避免绑定(bind) http://doc.qt.io/qt-5/sql-driver.html ,使用程序或动态添加您的参数:

  public void mtd(int param)
{
if (q.prepare("SELECT id FROM Things WHERE
parent_id ='"+param+"'")) {
if (q.exec) {
//DO STUFF
}
}}

关于mysql - QSqlQuery::prepare + MySQL ODBC 连接器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53418897/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com