[英]How to fix “No query Unable to fetch row” in qt
我有一个简单的 sqlite3 数据库,其中包含几个名称和 ID。 如果给出了 id,我想得到名字。 如果我运行我的程序,我会收到以下错误:
错误:“错误:“无查询无法获取行”“SELECT name FROM name_table WHERE id = %1)”
数据库名称是“dataname”,数据所在的表是“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()
function 返回的内容。 有了它,您可以在执行查询错误之前捕获它们。
将“=”替换为“喜欢”
query.prepare("SELECT name FROM
name_table WHERE id like \'%1\' " )
经过一番努力,我找到了所有的错误。
db.setName
需要数据库的文件路径(和扩展名),而不仅仅是文件名:db.setName("C:/User/name/Documents/db.sqlite3");
QSqlQuery query;
query.prepare("SELECT name FROM name_table WHERE id = ?");
query.bindValue(0, mInputText);`
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.