QSQlRelation über drei Tabellen

Alles rund um die Programmierung mit Qt
Antworten
Grieko
Beiträge: 17
Registriert: 12. Oktober 2016 08:50

QSQlRelation über drei Tabellen

Beitrag von Grieko »

Hallo, ich bin auf der Suche nach Unterstützung für ein QSql Projekt (MS SQLServer).
Also folgendes: Ich habe eine Tabelle mit Artikeln und eine mit Lieferanten. Da ich Artikel bei mehreren Lieferanten bestellen kann, werden diese über eine dritte Tabelle "Artikel und Lieferanten" verknüpft. Für jede Kombination aus Artikel und Lieferant gibt es hier einen Eintrag, der sowohl die Artikel-ID als auch die Lieferanten-ID enthält. So weit so gut.
Nun möchte ich weiterhin Bestellungen anlegen. Ich habe als eine weitere Tabelle mit den Kopfdaten (Bestellungen), wobei jede Bestellung logischerweise einem Lieferanten zugeordnet ist. Die Bestellpositionen befinden sich in einer weiteren Tabelle namens "Bestellpositionen". Hier steht also die ID der übergeordneten Bestellung, die ID des Bestellers (aus der Tabelle Personen) und die ID des Artikels (aus der Tabelle Artikel).
Nun möchte ich diese Daten auch anzeigen. Dazu habe ich zwei Tableviews: Eines mit den Bestellungen, das andere mit den zugeordneten Positionen.
Logischerweise zeigt das zweite Tableview zunächst einmal nur die Werte IN der Tabelle an, also die ID-Nummern. Nun möchte ich aber dass anstelle dieser ID's die Bezeichnungen angezeigt werden. Also habe ich beispielsweise mit Model->SetRelation eine Relation damit die Namen der Personen angezeigt werden.
Bei den Artikeln geht dies leider nicht: In Bestellpositionen ist ja nicht die eigentliche ID des Artikels gespeichert, sondern nur der Verweis auf die Tabelle "Artikel und Lieferanten". Dort wiederum steht die Artikel-ID. Ich müsste also eine Relation setzen von Bestellpositionen-->ArtikelundLieferanten-->Artikel.... Wie macht man sowas ?

Code: Alles auswählen

    mBestellungen = new QSqlRelationalTableModel (this, t.GetDb());
    mBestellpositionen = new QSqlRelationalTableModel (this, t.GetDb());

    mBestellungen->setTable("TbBestellungen");
    mBestellungen->setRelation(1,QSqlRelation("TbBestellstatus","ID","Text"));
    mBestellungen->setRelation(2,QSqlRelation("TbLieferanten","ID","Lieferant"));
    mBestellungen->select();
    ui->tvBestellungen->setModel(mBestellungen);
    ui->tvBestellungen->resizeColumnsToContents();

    mBestellpositionen->setTable("TbBestellpositionen");
    mBestellpositionen->setRelation(2,QSqlRelation("TbArtikelUndLieferanten","ID","ArtikelID"));
    mBestellpositionen->setRelation(3,QSqlRelation("TbPersonen","ID","Name"));
    mBestellpositionen->select();
    ui->tvBestellpositionen->setModel(mBestellpositionen);
Antworten