如何在qt中修复"No query Unable to fetch row"

How to fix "No query Unable to fetch row" in qt

本文关键字:query No Unable to row fetch qt      更新时间:2023-10-16

我有一个简单的sqlite3数据库,其中包含几个名称和id。如果给出了id,我想得到这个名字。如果我运行我的程序,我收到以下错误:

错误:"错误:"无查询无法提取行" "从 ID = %1 name_table中选择名称(">

数据库名称为"数据名称",数据所在的表为"name_table"。下面是我的代码:

QSqlDatabase db;
mInputText = ui->lineEdit->text();
const QString DRIVER("QSQLITE");
if(QSqlDatabase::isDriverAvailable(DRIVER)){
db = QSqlDatabase::addDatabase(DRIVER);
}
db.setHostName("localhost");
db.setDatabaseName("dataname");
db.open();
if(!db.open()){
qWarning() << "ERROR: " << db.lastError();
}    
}

MainWindow::~MainWindow()
{
delete ui;
}
void MainWindow::on_pushButton_clicked()
{
mInputText = ui->lineEdit->text();
QSqlQuery query;
query.prepare("SELECT name FROM name_table WHERE id = %1");
query.bindValue("%1", mInputText);
if(!query.exec())
qWarning() << "ERROR: " << query.lastError().text();
qDebug() << query.executedQuery();
if(query.first())
ui->mOutputText->setText(query.value(0).toString());
else
ui->mOutputText->setText("not found");

}

有人可以帮我找到我的错误吗?我是 sql 的新手。我认为我的错误可能是".setHostName"或查询绑定值,但我破坏了所有内容,我无法让它工作。提前感谢!

问候

我认为你错误地使用了占位符。此外,查询字符串还有一个语法错误 - 右括号。您可能想尝试以下操作:

[..]
query.prepare("SELECT name FROM name_table WHERE id = ?");
query.bindValue(0, mInputText);
[..]

[..]
query.prepare("SELECT name FROM name_table WHERE id = :id");
query.bindValue(":id", mInputText);
[..]

还值得检查QSqlQuery::prepare()函数返回的内容。有了它,您可以在执行查询错误之前捕获查询错误。

将"="替换为"like">

query.prepare("SELECT name FROM 
name_table WHERE id like '%1' " )

经过大量的挣扎,我发现了所有的错误。

  1. db.setName需要数据库的文件路径(和扩展名(,而不仅仅是文件名:
db.setName("C:/User/name/Documents/db.sqlite3"); 
  1. 我错误地使用了占位符(谢谢@vahancho(。它应该看起来像这样:
QSqlQuery query;
query.prepare("SELECT name FROM name_table WHERE id = ?");
query.bindValue(0, mInputText);`