diff options
Diffstat (limited to 'src/sql/models/qsqltablemodel.cpp')
-rw-r--r-- | src/sql/models/qsqltablemodel.cpp | 54 |
1 files changed, 22 insertions, 32 deletions
diff --git a/src/sql/models/qsqltablemodel.cpp b/src/sql/models/qsqltablemodel.cpp index 19c9ba7b9b..8f63ee3910 100644 --- a/src/sql/models/qsqltablemodel.cpp +++ b/src/sql/models/qsqltablemodel.cpp @@ -66,36 +66,6 @@ QSqlRecord QSqlTableModelPrivate::record(const QVector<QVariant> &values) const return r; } -/*! \internal - Set a record for OnFieldChange and OnRowChange. -*/ -bool QSqlTableModelPrivate::setRecord(int row, const QSqlRecord &record) -{ - Q_Q(QSqlTableModel); - bool isOk = true; - - QSqlTableModel::EditStrategy oldStrategy = strategy; - - // FieldChange strategy makes no sense when setting an entire row - if (strategy == QSqlTableModel::OnFieldChange) - strategy = QSqlTableModel::OnRowChange; - for (int i = 0; i < record.count(); ++i) { - int idx = nameToIndex(record.fieldName(i)); - if (idx == -1) - continue; - QModelIndex cIndex = q->createIndex(row, idx); - QVariant value = record.value(i); - QVariant oldValue = q->data(cIndex); - if (oldValue.isNull() || oldValue != value) - isOk &= q->setData(cIndex, value, Qt::EditRole); - } - if (isOk && oldStrategy == QSqlTableModel::OnFieldChange) - q->submitAll(); - strategy = oldStrategy; - - return isOk; -} - int QSqlTableModelPrivate::nameToIndex(const QString &name) const { QString fieldname = name; @@ -1236,8 +1206,28 @@ bool QSqlTableModel::setRecord(int row, const QSqlRecord &record) bool isOk = true; switch (d->strategy) { case OnFieldChange: - case OnRowChange: - return d->setRecord(row, record); + case OnRowChange: { + EditStrategy oldStrategy = d->strategy; + + // FieldChange strategy makes no sense when setting an entire row + if (d->strategy == OnFieldChange) + d->strategy = OnRowChange; + for (int i = 0; i < record.count(); ++i) { + int idx = d->nameToIndex(record.fieldName(i)); + if (idx == -1) + continue; + QModelIndex cIndex = createIndex(row, idx); + QVariant value = record.value(i); + QVariant oldValue = data(cIndex); + if (oldValue.isNull() || oldValue != value) + isOk &= setData(cIndex, value, Qt::EditRole); + } + if (isOk && oldStrategy == OnFieldChange) + submitAll(); + d->strategy = oldStrategy; + + return isOk; + } case OnManualSubmit: { QSqlTableModelPrivate::ModifiedRow &mrow = d->cache[row]; if (mrow.op == QSqlTableModelPrivate::None) |