1

这是我的代码,似乎没有任何问题:

QSqlDatabase db=QSqlDatabase::addDatabase("QSQLITE");
db.setDatabaseName("thedata.sqlite");
db.open();

QSqlQuery query;
query.prepare("SELECT lastname FROM people where firstname='?' ");
query.bindValue(0, lineEdit->text());

bool x = query.exec();

if(x){
   lineEdit_2->setText(query.value(0).toString());
 }

 else {
   QSqlError err;
    err = query.lastError();
    QMessageBox::about(this,"error",err.text()   );
 }

当程序始终运行时,它会给出错误parameter count mismatch,我正在使用 qt 4.8 以及它自己的用于使用 sqlite 的标头。

我会非常感谢任何建议,虽然我在谷歌搜索我看到这个问题的很多帖子,但没有任何帮助。

谢谢你。

4

1 回答 1

2

你准备好的陈述是错误的,应该是:

quary.prepare("SELECT lastname FROM people where firstname=?");

'请注意,占位符周围没有单引号 ( )。如果你加上引号,它会作为文字传递给数据库,给你留下一个无参数的查询和传递太多参数的代码。

(将该变量名称更改为query也将是一个不错的选择。)

您还需要检查返回值 if QSqlQuery::prepare,并打印/显示您从中获得的错误消息,如果它失败 - 否则QSqlQuery::exec重置当前错误,如果解析有问题,您将收到一条非常无意义的错误消息准备好的声明。

if(x){
  lineEdit_2->setText(quary.value(0).toString());
}

这也是不正确的。您需要调用(并检查返回值)query.next()将结果集定位到返回的第一行(如果有的话)。.value(X)在你打电话之前你不能使用.next()

于 2012-12-18T17:32:44.407 回答