2015-02-11 5 views
1

Что я хочу сделать, это query.exec() оператор DELETE, и если удаление успешно, я хочу отобразить обновленную таблицу, иначе отобразите QMessageBox, говорящий, что имя не совпало.Как сделать условные утверждения на основе результатов SqlQuery в QtCreator?

У меня создалось впечатление, что если инструкция 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

Thanks mate. Он отлично работает.: D – DDauS

 Смежные вопросы

  • Нет связанных вопросов^_^