2015-02-11 51 views
1

我想要做的是query.exec()一個DELETE語句,如果刪除成功,我想顯示更新的表,否則顯示一個QMessageBox,說名稱不匹配。如何在QtCreator中基於SqlQuery結果做條件語句?

我的印象是,如果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(); 

回答

2

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

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

注,每Qt的文檔,這個功能

返回受結果的SQL語句影響的行數,如果無法確定,則返回 -1。請注意,對於SELECT語句,該值是未定義的;使用size()來代替。如果查詢未激活,則返回-1 。

+0

謝謝隊友。它完美地工作 – DDauS 2015-02-12 17:27:36