Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/qt/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Qt5和SQLite:bindValue()的结果是;参数计数不匹配“;错误_Qt_Sqlite_Qt5_Qtsql_Qsqlquery - Fatal编程技术网

Qt5和SQLite:bindValue()的结果是;参数计数不匹配“;错误

Qt5和SQLite:bindValue()的结果是;参数计数不匹配“;错误,qt,sqlite,qt5,qtsql,qsqlquery,Qt,Sqlite,Qt5,Qtsql,Qsqlquery,我正在使用SQLite驱动程序在Windows7上使用Qt5.3.1(64位)执行一个简单的参数化查询。当我使用bindValue()设置查询的单个参数的值时,我系统地得到了可怕的“参数计数不匹配”错误。当我使用addBindValue()时,一切正常。请注意,带有bindValue()的代码在Qt 4.8.5(64位)中运行良好 以下是完整的代码(main.cpp): 我的机器上的程序输出: QSqlError("", "Parameter count mismatch", "") 有什么想

我正在使用SQLite驱动程序在Windows7上使用Qt5.3.1(64位)执行一个简单的参数化查询。当我使用
bindValue()
设置查询的单个参数的值时,我系统地得到了可怕的“参数计数不匹配”错误。当我使用
addBindValue()
时,一切正常。请注意,带有
bindValue()
的代码在Qt 4.8.5(64位)中运行良好

以下是完整的代码(
main.cpp
):

我的机器上的程序输出:

QSqlError("", "Parameter count mismatch", "")

有什么想法吗?

我刚刚发现我的问题是重复的,而且答案是正确的

事实证明,传递给
QSqlQuery
的构造函数的查询字符串会立即执行,如下所示


不清楚为什么这样的查询在Qt4.8.5上运行良好,或者为什么它们在使用位置参数(使用
占位符)时在使用命名参数(使用
占位符)失败时在Qt5.3.1上运行良好,只是想添加另一个潜在的罪魁祸首:我试图将一个值绑定到列名,但得到了
参数计数不匹配
错误,无论实际错误是什么,这似乎都是转到错误消息:)

事实证明,这只是一种无效的SQL方法,请参阅

所以不是

query.prepare("UPDATE connections SET (:columnName) = (:value) WHERE id = (:id)");
query.bindValue(":columnName", someColumnName);
query.bindValue(":value", someValue);
query.bindValue(":id", someId);
这样做:

query.prepare(QString("UPDATE connections SET %1 = (:value) WHERE id = (:id)").arg(someColumnName));
query.bindValue(":value", someValue);
query.bindValue(":id", someId);
// etc.

这不是OP所做的,但这个线程是我搜索过程中首先出现的线程,它可能会为其他人节省一些时间。

可能的重复我也遇到了类似的问题,但在我的情况下,解决的是在查询中添加括号,所以不是
query.prepare(“插入到tablename(columnname)值:占位符”)我必须做
查询。准备(“插入到tablename(columnname)值(:占位符)”我有一个类似的问题(正确使用prepare),但我的错误是sql查询中的一个输入错误(我用“SELECT a,b,cFROM table”而不是“SELECT a,b,c FROM table”)…错误消息“Parameter count mismatch”在这里确实有误导性…可能对某人有所帮助,祝你好运!我也有类似的问题。但是我在setdatadasepath>db.setDatabaseName(path)上错了;
query.prepare("UPDATE connections SET (:columnName) = (:value) WHERE id = (:id)");
query.bindValue(":columnName", someColumnName);
query.bindValue(":value", someValue);
query.bindValue(":id", someId);
query.prepare(QString("UPDATE connections SET %1 = (:value) WHERE id = (:id)").arg(someColumnName));
query.bindValue(":value", someValue);
query.bindValue(":id", someId);
// etc.