QDataWidgetMapper ist super ... man setz die QItemDelegate
und er fuelt die daten richtig aus, jedoch mit speichern in mysql dass kann er nicht warum?
Ich kann nur das original model mit dem QDataWidgetMapper vergleichen und auf aenderungen schauen die man dann updatend....
gibt es eine andere methode mit mysql ausser die tabelle?
Code: Alles auswählen
QStringList sets; /* mysql update SET */
bool OnModelSave = mapper->submit();
/* undo ist nicht mehr moeglich */
if (OnModelSave) {
/* QDataWidgetMapper model lesen */
const QAbstractItemModel *model_map = mapper->model(); /* vergleichen mit dem original sql model */
QSqlQueryModel *modupdate = mod;
if (modupdate->lastError().isValid()) {
QMessageBox::warning(0, tr("Error SQL!"),tr("Message: %1").arg(modupdate->lastError().text()));
return;
} else {
for (int e = 0; e < modupdate->rowCount(); ++e) {
if (mapper->currentIndex() == e) {
QSqlRecord r = modupdate->record(e);
for (int x = 0; x < modupdate->columnCount(); ++x) {
QModelIndex index = model_map->index(e,x);
const QString cellTxt = r.value(x).toString();
const QString NewcellTxt = model_map->data(index,Qt::DisplayRole).toString();
/* gibt es neue daten aus der differenz? */
if (cellTxt != NewcellTxt) {
sets.append(QString("%1='%2'").arg(r.fieldName(x)).arg(G_Quote(NewcellTxt)));
}
}
}
}
}
} else {
qDebug() << "### QDataWidgetMapper error " << OnModelSave;
}
/* wenn sets.size() > 0 update ja */