Seite 1 von 1

2 Tabellen in QTableView ausgeben

Verfasst: 2. Januar 2008 18:18
von Lodas23
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

Verfasst: 2. Januar 2008 19:35
von upsala
Man kann QSqlQueryModel für eine editierbare Tabelle verwenden (Examples)

Und was meinst du mit Anhängen? Vertikal, Horizontal, Baumform?

Verfasst: 2. Januar 2008 19:48
von Lodas23
Danke für den Link, ich werde mir das mal anschauen und schauen in wie weit mich das weiter bringt.

Die Tabellen sollen horizontal in der QTableView angehängt werden.

Grüße,

Andy

Verfasst: 2. Januar 2008 20:01
von upsala
Also nichts anderes als ein JOIN von zwei Tabellen. Wenn du dann noch die Möglichkeit hast, die Datensätze eindeutig zu identifizieren, dürfte das oben genannte Beispiel genau das richtig sein.

Re: 2 Tabellen in QTableView ausgeben

Verfasst: 16. Dezember 2012 19:05
von RogerWilco
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:
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.
Aber mit "setTable()" ist man wieder auf eine Tabelle limitiert, oder?

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);

Re: 2 Tabellen in QTableView ausgeben

Verfasst: 16. Dezember 2012 22:34
von RogerWilco
So geht es auch ohne das QRelationalTableModel:

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);
Man muss nur den richtigen Ansatz finden:
http://qt-project.org/doc/qt-4.8/qsqlquerymodel.html