2015-04-25 1 views
0

Я пытаюсь сделать сообщение show once, если запрос в цикле выполняется успешно. Когда я это делаю;Как сделать сообщение показать один раз с помощью QMessage

QSqlQuery query1; 
for (int i = 0; i < itemEdits.size(); i++) { 
    query1.prepare("INSERT INTO class1_bills (bill_item, amount) VALUES (:bill_item, :amount)"); 
    query1.bindValue(":bill_item", ""+itemEdits[i]->text()+""); 
    query1.bindValue(":amount", ""+amountEdits[i]->text()+""); 
} 
if (query1.exec()) { 
    close(); 
    QMessageBox::warning(0, "success", "Bill for Class 1 successfully prepared"); 

} 
else { 
    close(); 
    QMessageBox::warning(0, "failed", "Bill for Class 1 could not be prepared"); 

} 

Запрос вставляет только 1 запись в таблицу. то есть, если предполагается, что вставить в таблицу, например, 3 записи через цикл, она выполняется только один раз. И если это так;

QSqlQuery query1; 
for (int i = 0; i < itemEdits.size(); i++) { 
    query1.prepare("INSERT INTO class1_bills (bill_item, amount) VALUES (:bill_item, :amount)"); 
    query1.bindValue(":bill_item", ""+itemEdits[i]->text()+""); 
    query1.bindValue(":amount", ""+amountEdits[i]->text()+""); 

    if (query1.exec()) { 
     close(); 
     QMessageBox::warning(0, "success", "Bill for Class 1 successfully prepared"); 

    } 
    else { 
     close(); 
     QMessageBox::warning(0, "failed", "Bill for Class 1 could not be prepared"); 

    } 
} 

Сообщение показывает количество раз, эквивалентное циклу. Но я хочу, чтобы сообщение отображалось только один раз, независимо от количества циклов, выполняемых циклом. Как мне это сделать?

ответ

1

В первом коде вы выполняете сам запрос вне цикла , когда он должен находиться в цикле, чтобы он вставлял все количество зацикленных записей. Это заставляет запрос выполнять только один раз.

Во втором коде вы делаете правильную вещь, выполняя запрос в цикле , чтобы он вставлял все количество зацикленных записей. Но вы помещаете сообщение, которое должно показывать «один раз» в цикле, а это значит, что сообщение отображается каждый раз, когда запись вставляется в таблицу по циклу. Чтобы решить эту задачу, назначьте выполнение переменной Boolean внутри цикла, который был объявлен (возможно, инициализирован, потому что компилятор может отправить предупреждение it maybe used uninitialized) уже вне цикла и использовать его в операторе if так:

QSqlQuery query1; 
//declared and initialized here 
bool ok = 0; 
for (int i = 0; i < itemEdits.size(); i++) { 
    query1.prepare("INSERT INTO class1_bills (bill_item, amount) VALUES (:bill_item, :amount)"); 
    query1.bindValue(":bill_item", ""+itemEdits[i]->text()+""); 
    query1.bindValue(":amount", ""+amountEdits[i]->text()+""); 

    //assigned here 
    ok = query1.exec(); 
} 
//used here 
if (ok) { 
    close(); 
    QMessageBox::warning(0, "success", "Bill for Class 1 successfully prepared"); 

} 
else { 
    close(); 
    QMessageBox::warning(0, "failed", "Bill for Class 1 could not be prepared"); 

} 

Это должно решить вашу проблему.

+0

спасибо за объяснение. –

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