Hallo,
ich habe zwei Tabellen in einer sqlite3-Datenbank. In einem Feld wird über eine Relation auf die andere Tabelle verwiesen. Beispiel: ich möchte elektronische Bauteile verwalten. In der Tabelle Bauteile gibt es einen Wert, der z.B. einen Widerstandswert angibt und eine Einheit, z.B. "Ohm". Die Einheiten sollen aber in einer anderen Tabelle gespeichert und über eine Relation verbunden werden:
tab_bauteile
Feld "Wert" = integer
Feld "ref_Einheit" = integer
ref_einheiten
Feld "id" = integer (auto inc), primary key
Feld "Einheit" = String
Das heisst von tab_bauteile verweist das Feld "ref_Einheit" auf den Primärschlüssel "id" in der Tabelle ref_einheiten.
In einem Dialogfenster greife ich nun via QSqlRelationalTableModel auf die Tabelle "tab_bauteile" zu und habe eine Relation zu "ref_einheiten" hergestellt. Die Einheit soll in einer Combobox angezeigt werden und der Nutzer soll die Möglichkeit haben, auch neue Werte einzutragen.
Die spannende Frage ist nun: geht das überhaupt so einfach? In der Qt-Doku steht, dass man sich um referentielle Integrität selbst kümmern muss. Was passiert also, wenn ich die Combo-Box editierbar mache und der Nutzer irgend eine Einheit eintippen kann?
Eigentlich müsste in der Tabelle "ref_einheiten" dann ein neuer Datensatz angelegt werden, mit der neu eingegebenen Einheit, sowie die neue Auto-ID referenziert werden.
Wie macht man sowas üblicherweise?
Viele Grüße
Markus
QSqlRelationalTableModel: Referentielle Integrität
-
markusd112
- Beiträge: 33
- Registriert: 30. Dezember 2012 18:25
Re: QSqlRelationalTableModel: Referentielle Integrität
Hallo!
Ich habe noch nicht mit dem QSqlRelationalTableModel gearbeitet, aber wenn Du die Eingabe von neuen Einheiten zuläßt, dann muss halt in der Tabelle "reh_einheiten" per Insert ein neuer Datensatz eingefügt werden. Dieser bekommt dann eine neue ID, die man evtl. mit QSqlQuery->lastInsertID() herausbekommt. Beim Update oder Insert des neuen bzw. vorhandenen Bauteils mußt Du dann diese ID im Feld "ref_Einheit" speichern. Vielleicht hilft dieser kleine Denkanstoß.
Viele Grüße,
Markus
Ich habe noch nicht mit dem QSqlRelationalTableModel gearbeitet, aber wenn Du die Eingabe von neuen Einheiten zuläßt, dann muss halt in der Tabelle "reh_einheiten" per Insert ein neuer Datensatz eingefügt werden. Dieser bekommt dann eine neue ID, die man evtl. mit QSqlQuery->lastInsertID() herausbekommt. Beim Update oder Insert des neuen bzw. vorhandenen Bauteils mußt Du dann diese ID im Feld "ref_Einheit" speichern. Vielleicht hilft dieser kleine Denkanstoß.
Viele Grüße,
Markus