1

レコードを更新しようとしていますが、これがあります:

tableModel->select();
QModelIndex index = ui.tableView->currentIndex();
QString sqlQuery = QString("UPDATE %1 SET firstname=:firstname, lastname=:lastname,  country=:country, city=:city WHERE id=:id)").arg(tableName);
query.prepare(sqlQuery);
QSqlRecord recordz = tableModel->record(index.row());

query.bindValue(":firstname", ui.fEdit->text());
query.bindValue(":lastname",  ui.lnEdit->text());
query.bindValue(":country", ui.cEdit->text());
query.bindValue(":city",  ui.cityEdit->text());
query.bindValue(":id", recordz.value("id").toInt());
query.exec();
tableModel->submitAll();

アプリケーションはエラーなしでコンパイルされますが、編集内容は保存されません。

4

1 に答える 1

1
    query.bindValue(":id", ui.tableView->currentIndex());

問題のあるコード行があります。データ関数を使用して実際のインデックスまたは値を返そうとすることができますが、tableView インデックス != SQL データベース インデックスを覚えておいてください。行をドロップすると、データベースのインデックスが Qt のインデックスとは異なるため、実際の DB ID を最初の SQL クエリに含め、他の値と一緒に保存し、実行時に返す必要があります。あなたの更新クエリ。

于 2011-09-12T08:27:38.083 に答える