Hallo und frohes neues zusammen,
ich versuche seit einiger Zeit eine geeignete Lösung für folgendes Problem zu finden:
Ich habe ein GUI welches unter anderem über eine QTableView verfügt, welches mir Daten einer MySQL Datenbank präsentiert. Die Datenbank verfügt über mehrere Tabellen. Wird die GUI gestartet wird nur eine der vielen Tabellen angezeigt. Diese Tabelle ist die Haupttabelle und alle anderen sind über Fremdschlüssel mit dieser verbunden.
In meiner GUI soll es nun möglich sein durch ein Signal die verbleibenden Tabellen in unterschiedlicher Reihenfolge bzw. in verschiedenen Kombinationen an die Haupttabelle anzuhängen und wieder zu entfernen . Ferner (und das ist ein Problem, da ich deswegen die Klasse QSqlQueryModel nicht benutzen kann) muss man in eine der Tabellen Daten schreiben können.
Das Anhängen bekomme ich einfach nicht hin. Hat einer eine Idee?
Ist klar geworden, was mein Problem ist?
Vielen Dank und einen schönen Abend.
Grüße,
Andy
2 Tabellen in QTableView ausgeben
Man kann QSqlQueryModel für eine editierbare Tabelle verwenden (Examples)
Und was meinst du mit Anhängen? Vertikal, Horizontal, Baumform?
Und was meinst du mit Anhängen? Vertikal, Horizontal, Baumform?
-
- Beiträge: 61
- Registriert: 26. November 2009 00:08
- Kontaktdaten:
Re: 2 Tabellen in QTableView ausgeben
Hallo zusammen,
ich würde mich gerne an dieses (alte) Problem mit meiner Frage anhängen.
Ich habe die Lösung nicht so ganz in den o.g. Besipiel gefunden.
Angenommen, man hätte einen Fall, wie hier:
http://qt-project.org/doc/qt-4.8/qsqlre ... model.html
Jetzt nehmen wir an, in der Tabelle Länder gibt es 3 Spalten:
id
name
official_language
Nun möchte man noch zusätzlich die Gesprochene Sprache in dieser Tabelle mit anzeigen.
Gibt es eine Möglichkeit, dem Model zu sagen, dass die Abfrage entsprechend angepasst werden soll?
Liegt der Trick vielleicht in "setQuery"? Davon wird in der Dokumentation eindeutig abgeraten:
Für einen Tipp, oder sogar ein Beispiel, wäre ich sehr dankbar.
Anbei mein konkretes Beispiel mit den Tabellen tbl_sammler, tbl_sammelbilder und tbl_sammlung:
Ich würde gerne aus der Tabelle "tbl_sammelbilder" noch die Spalte mit der Bildbeschreibung hinzufügen:
ich würde mich gerne an dieses (alte) Problem mit meiner Frage anhängen.
Ich habe die Lösung nicht so ganz in den o.g. Besipiel gefunden.
Angenommen, man hätte einen Fall, wie hier:
http://qt-project.org/doc/qt-4.8/qsqlre ... model.html
Jetzt nehmen wir an, in der Tabelle Länder gibt es 3 Spalten:
id
name
official_language
Nun möchte man noch zusätzlich die Gesprochene Sprache in dieser Tabelle mit anzeigen.
Gibt es eine Möglichkeit, dem Model zu sagen, dass die Abfrage entsprechend angepasst werden soll?
Liegt der Trick vielleicht in "setQuery"? Davon wird in der Dokumentation eindeutig abgeraten:
Aber mit "setTable()" ist man wieder auf eine Tabelle limitiert, oder?void QSqlTableModel::setQuery ( const QSqlQuery & query ) [protected]
This function simply calls QSqlQueryModel::setQuery(query). You should normally not call it on a QSqlTableModel. Instead, use setTable(), setSort(), setFilter(), etc., to set up the query.
Für einen Tipp, oder sogar ein Beispiel, wäre ich sehr dankbar.
Anbei mein konkretes Beispiel mit den Tabellen tbl_sammler, tbl_sammelbilder und tbl_sammlung:
Ich würde gerne aus der Tabelle "tbl_sammelbilder" noch die Spalte mit der Bildbeschreibung hinzufügen:
Code: Alles auswählen
//create general overview //funktioniert, aber nur mit einer Tabelle und den Fremdschlüsseln selbst...
overviewModel = new QSqlRelationalTableModel(this);
overviewModel->setTable("tbl_sammlung");
overviewModel->setRelation(1, QSqlRelation("tbl_sammler", "id", "nickname"));
overviewModel->setRelation(2, QSqlRelation("tbl_sammelbilder", "sammelbild_ID", "sammelbildname"));
overviewModel->select();
ui->tv_overview->setModel(overviewModel);
-
- Beiträge: 61
- Registriert: 26. November 2009 00:08
- Kontaktdaten:
Re: 2 Tabellen in QTableView ausgeben
So geht es auch ohne das QRelationalTableModel:
Man muss nur den richtigen Ansatz finden:
http://qt-project.org/doc/qt-4.8/qsqlquerymodel.html
Code: Alles auswählen
QSqlQueryModel *model;
model = new QSqlQueryModel;
model->setQuery("SELECT anzahl, nickname, kontaktinfo, aktionsname, sammelbildname, inhalt FROM tbl_sammlung, tbl_sammler, tbl_sammelbilder, tbl_sammelaktion "
"WHERE tbl_sammlung.sammler = tbl_sammler.id AND "
"tbl_sammlung.sammelbild = tbl_sammelbilder.sammelbild_ID AND "
"tbl_sammelbilder.sammelaktion = tbl_sammelaktion.sammelaktion_ID");
ui->tv_overview->setModel(model);
http://qt-project.org/doc/qt-4.8/qsqlquerymodel.html