QTablemodel.submitAll() verschluckt Update
Verfasst: 2. April 2008 14:08
Hi,
ich hab ein etwas komisches Problem. Ich versuche eine Zeile eines Tablemodels per record zu updaten, sobald ich aber dann submitAll() aufrufe, enthält die geupdatete Zeile wieder die alten Werte. Was noch merkwürdiger ist, ist die Tatasche, dass der Code eigentlich 1:1 von einer anderen Stelle kopiert ist, wo er anstandslos funktioniert
Konstruktor:
UpdateMethode: Die Funktion iteriert über die neuen Datensätze, löscht den Datensatz, falls das DelDate != 0 ist, updatet den Datensatz, falls die id vorhanden ist oder fügt den Datensatz ein, falls die id in der Datenbank noch nicht vorhanden ist.
Ich bin wie gesagt etwas verwirrt, ich wüsste einfach nicht wo da ein Fehler sein könnte... submitAll() gibt true zurück, der letzte Sql Fehler ist auch leer.
Gruß Baz
ich hab ein etwas komisches Problem. Ich versuche eine Zeile eines Tablemodels per record zu updaten, sobald ich aber dann submitAll() aufrufe, enthält die geupdatete Zeile wieder die alten Werte. Was noch merkwürdiger ist, ist die Tatasche, dass der Code eigentlich 1:1 von einer anderen Stelle kopiert ist, wo er anstandslos funktioniert
Konstruktor:
Code: Alles auswählen
tmNotes = new QSqlTableModel(this);
tmNotes->setTable(tableName);
tmNotes->setEditStrategy(QSqlTableModel::OnManualSubmit);
tmNotes->select();Code: Alles auswählen
for (int i = 0; i < updatedRecords.size(); i++)
{
tmNotes->setFilter("id = " + QString::number(updatedRecords.id));
tmNotes->select();
// Deleted
if (updatedRecords.delDate != 0)
{
if (tmNotes->rowCount() == 1)
{
tmNotes->removeRow(0);
}
tmNotes->setFilter("");
tmNotes->select();
}
else
{
record.setValue("id", updatedRecords.id);
.
.
.
.
(viele Updatefelder)
}
// Falls der Datensatz existiert wird er updated
if (tmNotes->rowCount() == 1)
{
if (!tmNotes->setRecord(0, record))
{
tmNotes->setFilter("");
tmNotes->select();
return;
}
}
else
{
if (!tmNotes->insertRecord(-1, record))
{
tmNotes->setFilter("");
tmNotes->select();
return;
}
}
// Logisch, hier sind noch alle Daten korrekt
QMessageBox::information(this, "vorher", record.value("subject").toString());
record = tmNotes->record(0);
// Hier sind die Daten immer noch korrekt, also in der Cached-Table
QMessageBox::information(this, "nachher", record.value("subject").toString());
if (!tmNotes->submitAll())
{
return;
}
record = tmNotes->record(0);
// Nicht mehr korrekt
QMessageBox::information(this, "schluss", record.value("subject").toString());
}Gruß Baz