Hallo,
ich verwende Qt4.6 und dessen Qt Designer, um in einem QTableView SQL Tabellen anzuzeigen. Das klappt soweit.
Allerdings haben die Tabellen keinen echten Primary Key bzw. einen, der mehrere Spalten umfaßt. Wird nun im View nach einer Spalte sortiert, die einen Wert mehrfach enthält, werden die Zeilen in zufälliger Reihenfolge angezeigt, was sich durchaus ändert, wenn man Werte ändert.
Bsp.:
Eine SQL Tabelle mit den Felder A bis G; A & B bilden gemeinsam den Primary Key.
Nun wird nach A sortiert. Die Zeilen werden so dargestellt, daß alle Zeilen mit demselben Wert in A unmittelbar hintereinander stehen, die Werte in B haben jedoch eine zufállige Reihenfolge. Diese Reihenfolge ändert sich sogar, wenn man Werte in B bis G ändert.
Kann ich dem QTableView beibringen, wenn nach einer der Spalten C bis G sortiert werden soll (Click auf horizontalem Header oder sortByColumn()-Funktion), zusätzlich nach A und B sortiert wird; bei A und B entsprechend, jedoch die Spalte nur einmal.
Es müßte beim ORDER BY der SQL Abfrage nicht nur ein Feld, sondern mehrere angegeben werden.
Danke, Steffen
QTableView nach zwei oder mehr Spalten sortieren
-
Troll.Soft
- Beiträge: 190
- Registriert: 18. Juni 2008 09:52
- Wohnort: Hamburg
Hallo ska,
- es gibt keinen unechten Primary Key
- es ist völlig egal über wieviel Spalten der Primary Key läuft
- der Primary Key oder sonstige andere Indizes haben mit ein Sortierung nichts zu tun
- sortiert wird über "order by Spaltenname" in deinem Fall z.B.
check Deinen Sql-Code am Besten erst einmal in einer SQL-Konsole
tschüß
TrollSoft
- es gibt keinen unechten Primary Key
- es ist völlig egal über wieviel Spalten der Primary Key läuft
- der Primary Key oder sonstige andere Indizes haben mit ein Sortierung nichts zu tun
- sortiert wird über "order by Spaltenname" in deinem Fall z.B.
Code: Alles auswählen
select * from Table
where ...
order by A asc, B asc;
tschüß
TrollSoft
Hallo TrollSoft,
OK, und wie sag' ich's dem QTableView? Der ist ja dafuer verantwortlich, dem Model die Daten in der richtigen Reihenfolge zu entlocken.
Muss ich eine eigene QSqlTableModel Klasse dafuer ableiten? Derzeit verwende ich QSqlTableModel bzw. QSqlRelationalTableModel als Model.
Tschuess, Steffen
OK, und wie sag' ich's dem QTableView? Der ist ja dafuer verantwortlich, dem Model die Daten in der richtigen Reihenfolge zu entlocken.
Muss ich eine eigene QSqlTableModel Klasse dafuer ableiten? Derzeit verwende ich QSqlTableModel bzw. QSqlRelationalTableModel als Model.
Tschuess, Steffen
-ska
-
Troll.Soft
- Beiträge: 190
- Registriert: 18. Juni 2008 09:52
- Wohnort: Hamburg
Hallo Steffen,ska hat geschrieben: OK, und wie sag' ich's dem QTableView? Der ist ja dafuer verantwortlich, dem Model die Daten in der richtigen Reihenfolge zu entlocken.
dem View sagst Du nichts, der viewt nur. Das Model ist für die Daten verantwortlich. Das beinflußt Du z.B. so
Code: Alles auswählen
void QSqlTableModel::setSort ( int column, Qt::SortOrder order ) [virtual]
Sets the sort order for column to order. This does not affect the current data, to refresh the data using the new sort order, call select().
See also sort(), select(), and orderByClause()
Code: Alles auswählen
QSqlQuery Query;
Query.exec("select * from ... where ... order by ...");
QSqlTableModel::setQuery(Query);
TrollSoft