c++ - Qt Creator中如何根据Sql Query结果做条件语句?

标签 c++ sqlite qt-creator qsqlquery

我想做的是 query.exec() 一个 DELETE 语句,如果删除成功我想显示更新的表,否则显示一个 QMessageBox 说名称不匹配。

我的印象是,如果 DELETE 语句找不到条目,​​query.exec() 将为 FALSE。但无论我输入什么名字,它总是正确的。有解决这个问题的方法吗?谢谢大家...

所以我目前的代码是:

bool ok;
QInputDialog *dialog = new QInputDialog;
QString name = dialog->getText((QWidget*)this->parent(), tr("Enter Buyer to Delete:"),
                                          tr("Buyer Name:"), QLineEdit::Normal,
                                          "", &ok);
QSqlTableModel *model1;
QSqlQuery query;
query.prepare("DELETE from buyers WHERE name=:name");
query.addBindValue(name);
bool x = query.exec();      //<----PROBLEM: EVEN WITH INCORRECT name,
qDebug() << x;              // query.exec() RETURNS true ALTHOUGH delete
if (!x)                     // IS SUPPOSED TO FAIL 
{
    QMessageBox box;
    box.setInformativeText("No buyer found with name matching " + name);
    box.exec();

}
model1 = new QSqlTableModel;
model1->setTable("buyers");
model1->select();

model1->setHeaderData(0, Qt::Horizontal, tr("ID"));
model1->setHeaderData(1, Qt::Horizontal, tr("Name"));
model1->setHeaderData(2, Qt::Horizontal, tr("Location"));
model1->setHeaderData(3, Qt::Horizontal, tr("Phone"));
model1->setHeaderData(4, Qt::Horizontal, tr("Email"));

QTableView *view1 = new QTableView;
view1->setWindowTitle("Buyer List updated");
view1->setModel(model1);
view1->show();

最佳答案

您可以使用QSqlQuery::numRowsAffected():

QSqlQuery query("your_query_here");
query.exec();
if(query.numRowsAffected() == 0)
{
    //didn't delete anything
}
else
{
    //worked fine
}

注意,根据 Qt 文档,这个函数

Returns the number of rows affected by the result's SQL statement, or -1 if it cannot be determined. Note that for SELECT statements, the value is undefined; use size() instead. If the query is not active, -1 is returned.

关于c++ - Qt Creator中如何根据Sql Query结果做条件语句?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448088/

相关文章:

c++ - 创建一个模板来包装 C++ 成员函数并公开为 C 回调

c++ - 在 Visual Studio 2019 MSVC 中编译时出现编译错误 C2048,但在 clang++ 中可以正常工作吗?

android - Android应用程序在移动设备上崩溃,但在Eclipse上运行!

c++ - 事务中的sqlite3_step(stmt)失败,错误5,而没有调用我的忙处理程序

SQLite 完整性错误 : UNIQUE constraint failed:

cmake - qtcreator只能为cmake项目构建所有而非每个目标

c++ - 使用 std::vector 移动和复制语义

c++ - 任何好的 C++0x 概述?

c++ - Qt Creator 如何用作通用 C++ IDE(不使用 Qt 库)?

c++ - 使用/购买Qt SDK(包括Qt Creator等)