SQL-Relationsproblem

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

SQL-Relationsproblem

Beitrag von Grieko »

Ich habe in meiner Datenbank folgende Tabellen:
TbTypen (ID:INTEGER, Bezeichnung:Text)
TbKompressoren(ID:INTEGER>, Typ:INTEGER FOREIGN KEY TbTypen:ID, Serial:INTEGER)
TbAdsorbertausch (ID:INTEGER, DATUM:TEXT, Kompressor:INTEGER FOREIGN KEY tbKompressoren:ID);
Ich hoffe ich habe den Aufbau verständlich dargestellt.
Nun möchte ich in einem TableView im MainWindow die Daten der Tabelle TbAdsorbertausch darstellen.
Grundsätzlich funktioniert das auch erstmal.
Allerdings möchte ich über das Feld Kompressor:ID auf die Daten der Tabelle TbKompressor zugreifen. Und zwar einmal auf
die Seriennummer (was auch funktioniert) und zum anderen über das Feld TbKompressor.Id auf den Wert
TbTypen.Bezeichnung.
Wie mache ich das ?
Ich habe dazu in MainWindow folgende Variablen:
QSqlTableModel *m_tbTypen;
QSqlRelationalTableModel *m_tbKompressoren, *m_tbAdsorbertausch;

Beim Start führe ich folgenden Code aus:

Code: Alles auswählen

    // Kompressortypen
    m_tbTypen = new QSqlTableModel (this, m_dbm->GetDb());
    m_tbTypen->setTable("TbTypen");
    m_tbTypen->select();
    ui->tvKompressortypen->setModel((m_tbTypen));
    ui->tvKompressortypen->resizeColumnsToContents();

    // Kompressoren
    m_tbKompressoren = new QSqlRelationalTableModel(this, m_dbm->GetDb());
    m_tbKompressoren->setTable ("TbKompressoren");
    // Relation auf System setzen
    m_tbKompressoren->setRelation(1, QSqlRelation("TbTypen","ID","Bezeichnung"));
    m_tbKompressoren->select();
    ui->tvKompressoren->setModel(m_tbKompressoren);
    ui->tvKompressoren->resizeColumnsToContents();


    // Adsorbertausch
    m_tbAdsorbertausch = new QSqlRelationalTableModel(this, m_dbm->GetDb());
    m_tbAdsorbertausch->setTable ("TbAdsorbertausch");

    m_tbAdsorbertausch->setRelation(2,QSqlRelation("TbKompressoren","ID","Typ"));
    // m_tbAdsorbertausch->setRelation(2,QSqlRelation("TbKompressoren","ID","Serial"));
    m_tbAdsorbertausch->setRelation(3,QSqlRelation("TbTechniker","ID","Name"));
    m_tbAdsorbertausch->setRelation(4,QSqlRelation("TbStandorte","ID","Standort"));
    m_tbAdsorbertausch->select();
    ui->tvAdsorbertausch->setModel(m_tbAdsorbertausch);
    ui->tvAdsorbertausch->resizeColumnsToContents();
Es ergeben sich nun folgende zwei Probleme:
Ich muss auf TbKompressoren.ID zwei Relationen setzen: Eine um an die Seriennummer zu kommen, und eine um an den Typ zu kommen.
Dies geht schon nicht, sobald ich die zweite Relation setze wird die erste gelöscht.
Und das zweite Problem ist halt wie komme ich an den Wert TbTypen.Bezeichnung ?

Wäre klasse wenn mir jemand helfen könnte.
Antworten