QSqlTableModel: Zeile schreiben mit Autoincrement-Spalte

Alles rund um die Programmierung mit Qt
Antworten
Wowbagger
Beiträge: 17
Registriert: 14. Juli 2007 21:12

QSqlTableModel: Zeile schreiben mit Autoincrement-Spalte

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
Wowbagger
Beiträge: 17
Registriert: 14. Juli 2007 21:12

Beitrag 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.
Antworten