Ich verwende Qt Model View Programmierung für eine Datenbank, wo ein Objekt mit mehreren Tabellen dargestellt wird. Angenommen, die folgenden Objekt und coresponding Datenbanktabellen, die perfekt mein Design passen:QSqlTableModel für mehrere Tabellen
TagObject
- id
- name
- usable
- information
tag_table
- id
- name
- usable
tag_info_table
- id_ref
- info
Wie Sie sehen können, die Informationen Eigenschaft in einer anderen Tabelle getrennt Existenz von NULL zu verhindern weil diese Eigenschaft ist optional.
In der Datenbank habe ich eine Ansicht, die die Werte in eine 'Tabelle' aggregiert, die mit QSqlTableModel
abgefragt werden kann. Beachten Sie, dass Daten auf diese Weise nicht möglich sind. Soweit ich das verstehen konnte, wird der Datenbankentwurf von Qt's Klassen nicht unterstützt, weder QSqlTableModel
noch QSqlRelationalTableModel
unterstützen dies. (Zusätzlich QSqlQueryModel
unterstützt keine Einsätze überhaupt, so ist dies nicht in Frage.)
Fehle ich etwas? Gibt es eine Möglichkeit, dies mit den SQL-Klassen von Qt zu tun? Oder ist der einzige Weg, um diese Unterklasse zu erreichen QSqlQueryModel
wie hingewiesen here?
Das Modell ist standardmäßig schreibgeschützt. Um es lesend/schreibend zu machen, müssen Sie es ableiten und setData() und flags() neu implementieren. Eine andere Option ist die Verwendung von QSqlTableModel, das ein Lese-Schreib-Modell basierend auf einer einzelnen Datenbanktabelle bereitstellt.
Edit: Was Subklassifizieren finde ich this reference als ein schönen Einstiegspunkt.
Zwei nette Annäherungen, die zu meiner unterschiedlich sind, nett. Ich werde das untersuchen. – maxik
Ich endete mit einer Triggerfunktion auf der Ansicht, die perfekt funktioniert. Ich mag die Tatsache, so viel Logik wie möglich in die Datenbank zu bringen. Vielen Dank! – maxik
Kam in eine andere Frage, die verwandt ist, denke ich: Verwenden von getriggerten Ansichten, wie mit * n: m * Relationen zu behandeln, die nicht in der Ansicht sind? Irgendein guter Weg, sie in einen zu bekommen? Ich habe * Ersatzschlüssel * -Tabellen, die IDs von zwei Tabellen abbilden, um die Beziehung zu erhalten. – maxik