Seite 1 von 1
QSqlRelationlTableModel mit zusätzlicher Spalte
Verfasst: 30. Mai 2010 22:43
von sanni
In einer MySql-Tabelle ist ein Foreign-Key gespeichert. Im Programm benutze ich ein QTableView mit QSqlRelationalTableModel. Nun möchte ich aus der Spalte mit dem Foreign-Key der in der Tabelle auch ankommt, eine zweite Spalte der Zieltabelle des Foreign-Keys herauslesen.
Ich brauche also den Inhalt der Spalte 6 ebenfalls in Spalte 7, um (mittels setRelation()?) eine zweite Information aus der Tabelle herauslesen und darstellen zu können.
Wie mache ich das?
Verfasst: 31. Mai 2010 09:07
von solarix
Mit "QSqlRelationalTableModel" benutzt du eine Klasse, welche zum Lesen und Schreiben(!) einer bestimmten Tabelle(!) gedacht ist. Damit fallen viele Möglichkeiten von SQL weg weil das Editieren von beliebigen SQL-Statements keinen Sinn machen würde (z.B. von JOINs oder der Ergebnismenge einer Stored-Procedure).
IMHO bleiben dir daher drei Möglichkeiten:
* Entweder zu verzichtest auf das Editieren und stellst den Select selbst zusammen (siehe setQuery(); zwei mal die gleiche Kolonne ist (mindestens bei MySql) kein Problem), oder
* du brauchst die Editierfunktion (mit QSqlRelationalTableModel::setTable) und musst daher ein eigenes Model ableiten, welches (Read-Only) Foreign-Keys mehrfach anzeigen kann
* oder du bietest in deiner Software eine Möglichkeit, den verlinkten Datensatz sonst irgendwie zu öffnen (z.B. Kontextmenü des Datensatzes).
hth..
Verfasst: 31. Mai 2010 09:38
von sanni
Mir wurde auch schon vorgeschlagen, auf ein QSqlQueryModel zu wechseln, aber der Versuch war nicht so berauschend. Da ich die Anzeige Datumsabhängig brauche, habe ich mit setFilter() dann jedesmal eine neue, leere Zeile erzeugt, die nicht verschwinden wollte. Nach 10 Datumswechseln sieht das dann echt doof aus . . .
Verfasst: 31. Mai 2010 10:07
von solarix
Weil ich das Pflichtenheft nicht kenne und nicht weiss, wohin du moechtest und was du bereits versucht hast, kann ich dazu nichts sagen..
Anyway: du hast mit dem "QSqlRelationalTableModel" ja bereits ein QSqlQueryModel (das eine erbt ja vom anderen). Ich habe keine Ahnung, wie das RelationaModel darauf reagiert, aber evt. erhaelst du doch mit "setQuery(..)" deine beiden Kolonnen (zum Preis, dass du nicht mehr editieren kannst).
Verfasst: 2. Juni 2010 22:29
von sanni
Und genau da liegt der Haken in der Sache versteckt. Ohne die Möglichkeit zu editieren kann ich das ganze gleich vergessen. Daher habe ich nun da ganze auf ein QSqlQueryModel umgestellt. Das ist zwar etwas spröde, funktioniert aber auch
