Seite 1 von 1

Daten aus 3 DB-Tabellen in einem QTableView anzeigen

Verfasst: 23. September 2010 16:13
von Nele
Das Problem: Meine Applikation soll Informationen aus 3 Tabellen einer normalisierten Datenbank in einem QTableView anzeigen können, da das der "natürlichen Sicht" auf die Daten entspricht. In sql speak wäre das ein Equi Join

Code: Alles auswählen

select * from A, B, C where A.b=B.id AND A.c=C.id
.

Die Applikation soll neue Datensätze erzeugen (create), aktualisieren (update) und löschen (delete) können und das Ergebnis im QTableView anzeigen. Ich komme aus der Webapplikationsprogrammierung - das ist ein Selbstläufer, einfach zu implementieren. Da QT neu für mich ist, habe ich aber keine Ahnung, wie ich das sinnvoll in QT umsetzen könnte.

Die QT Beispiele nutzen ein QSqlRelationalTableModel mit einem QTableView. Foreign keys in der Haupttabelle A werden mit

Code: Alles auswählen

model->setRelation(2, QSqlRelation("city", "id", "name"));
aufgelöst. Ist es möglich einen foreign key in mehrere Felder/Spalten aufzulösen, so dass das Modell um zum Beispiel 3 Spalten erweitert wird? Ich brauche aus den Tabellen B und C den ganzen Record, nicht nur ein Feld mit dem ich die id in der Darstellung ersetzen kann.

Ich habe bereits das Web durchsucht und ein paar Threads zu ähnlichen Themen gefunden. Leider war bislang keine gute Lösung dabei. Die meisten Threads laufen darauf hinaus, dass man ein Custom Model implementieren soll - ich kann mir einfach nicht vorstellen, dass es für diese simple Aufgabe keine "Standardlösung" gibt.

Kennt jemand ein paar gute Links? Ich habe folgendes gelesen und teilweise ausprobiert: Implementing Custom Models und MasterDetail Form und QSqlRelationalTableModel.

Da QT neu für mich ist, habe ich vermutlich wesentliche Details übersehen. Alle Hinweise und Anmerkungen sind willkommen!

Vielen Dank im Voraus für eure Hilfe und Zeit!
Nele

Re: Daten aus 3 DB-Tabellen in einem QTableView anzeigen

Verfasst: 29. September 2010 12:00
von Nele
Problem durch Ableitung von QSqlQueryModel zum größten Teil gelöst.