2 Tabellen in QTableView ausgeben

Alles rund um die Programmierung mit Qt
Antworten
Lodas23
Beiträge: 6
Registriert: 2. Januar 2008 15:01

2 Tabellen in QTableView ausgeben

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Man kann QSqlQueryModel für eine editierbare Tabelle verwenden (Examples)

Und was meinst du mit Anhängen? Vertikal, Horizontal, Baumform?
Lodas23
Beiträge: 6
Registriert: 2. Januar 2008 15:01

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Re: 2 Tabellen in QTableView ausgeben

Beitrag 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);
RogerWilco
Beiträge: 61
Registriert: 26. November 2009 00:08
Kontaktdaten:

Re: 2 Tabellen in QTableView ausgeben

Beitrag 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
Antworten