Seite 1 von 1

QSqlTableModel: Zeile schreiben mit Autoincrement-Spalte

Verfasst: 10. Januar 2008 10:28
von Wowbagger
Hallo zusammen!

Ich versuche mich gerade an der Programmierung einer Datenbankanwendung mit QT.

Beim einfügen von neuen Zeilen weiß ich allerdings nicht, wie ich die ID-Spalte, die automatisch von der Datenbank vergeben wird, handhaben soll.

Code: Alles auswählen

model->insertRows(0, 2);
model->setData(model->index(0, 1), "Spalte1");
model->setData(model->index(0, 2), "Spalte2");
model->setData(model->index(1, 1), "Spalte1");
model->setData(model->index(1, 2), "Spalte2");
model ist ein QSqlTableModel, Spalte 0 ist die ID - sie wird also nicht gesetzt.

Bei einem submitAll wird nur eine Zeile geschrieben, vermutlich aufgrund der doppelten ID. Die ID soll aber erst von der Datenbank vergeben werden. Wie kann ich das erreichen?

Wowbagger

Verfasst: 10. Januar 2008 12:27
von upsala
Entweder versuchen, die ID-Spalte mit QVariant() zu befüllen oder

Code: Alles auswählen

bool QSqlTableModel::updateRowInTable ( int row, const QSqlRecord & values ) 
überladen und die Daten selbst in die Datenbank transferieren, oder wenn du z.B. Postrgresql verwendest die Serial-Werte sofort beim anlegen einer neuen Spalte holen.

Verfasst: 10. Januar 2008 16:07
von Wowbagger
Mit QVariant habe ich es zwar nicht hinbekommen, aber wenn ich einen Record verwende, kann ich die ID-Spalte auf Null setzen:

Code: Alles auswählen

QSqlRecord rec = model->record();
rec.setNull(0);
rec.setValue(1, "AAA");
rec.setValue(2, "BBB");
model->insertRecord(-1, rec);
So funktioniert es. Danke.