wie es scheint, arbeiten QSqlTableModel nicht zusammen mit Transaktionen.
Folgender Code führt nicht zu dem zu erwartenden Ergebnis. Vor einem submitAll() rufe ich an der QSqlDatabase ein transaction() auf. Gleich danach rufe ich ein rollback() auf. Jegliche Änderungen sollten durch das rollback rückgängig gemacht werden. Dies ist aber nicht der Fall. In der Datenbank steht nach dem rollback der Text "dies ist ein Test" in der ersten Zeile in Spalte 1 der Tabelle "Test".
Code: Alles auswählen
QSqlTableModel * model = new QSqlTableModel("tabelle");
model->select();
model->setData( model->index( 0, 0 ), "dies ist ein Test" );
...
// ***** hier der interessante Teil *****
model->database().transaction();
model->submitAll();
model->database().rollback();
// *******************************
...
Testen könnt ihr das, wenn ihr wollt, ganz einfach. Ändert einfach das example von Qt unter $(QTDIR)\examples\sql\cachedtable ab. Einfach in der Datei tableeditor.cpp folgende Zeilen
Code: Alles auswählen
void TableEditor::submit()
{
model->database().transaction();
if (model->submitAll()) {
model->database().commit();
} else {
model->database().rollback();
QMessageBox::warning(this, tr("Cached Table"),
tr("The database reported an error: %1")
.arg(model->lastError().text()));
}
}
Code: Alles auswählen
void TableEditor::submit()
{
model->database().transaction();
model->submitAll();
model->database().rollback();
}
Habt ihr ähnliche Erfahrungen wie ich zu diesem Thema? Oder habt ihr irgendwelche Ideen was ich bezüglich des Problemes machen kann?
MfG abelmi