QSqlTableModel Zeilen und Zellen auslesen

Verschiedenes zu Qt
Antworten
binnio
Beiträge: 9
Registriert: 5. Juni 2010 13:08

QSqlTableModel Zeilen und Zellen auslesen

Beitrag von binnio »

Hallo ich möchte zwei tableView Tabellen mit Leben füllen.

Meine zwei Datenbanken sind sehr einfach gehalten:
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Vorname"));
model->setHeaderData(2, Qt::Horizontal, tr("Nachname"));
model->setHeaderData(3, Qt::Horizontal, tr("Geburtsdatum"));
model->setHeaderData(4, Qt::Horizontal, tr("Telefon"));
model->setHeaderData(5, Qt::Horizontal, tr("Handy"));
model->setHeaderData(6, Qt::Horizontal, tr("Fax"));
model->setHeaderData(7, Qt::Horizontal, tr("E-Mail"));
und
void hauptprogramm::on_action_connect_triggered()
{
if(mSQLManager.connect()){
ui->statusBar->showMessage((QString("Datenbank-Driver:").append(mSQLManager.get_mDb().driverName().append("\nVerbingung erfolgreich aufgebaut"))));
}else{
ui->statusBar->showMessage(mSQLManager.get_mDb().lastError().driverText());
}


QSqlTableModel *model = new QSqlTableModel(ui->tableView_person);
model->setTable("person");
model->setEditStrategy(QSqlTableModel::OnFieldChange);

model->setSort(1, Qt::AscendingOrder);

model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Vorname"));
model->setHeaderData(2, Qt::Horizontal, tr("Nachname"));
model->setHeaderData(3, Qt::Horizontal, tr("Geburtsdatum"));
model->setHeaderData(4, Qt::Horizontal, tr("Telefon"));
model->setHeaderData(5, Qt::Horizontal, tr("Handy"));
model->setHeaderData(6, Qt::Horizontal, tr("Fax"));
model->setHeaderData(7, Qt::Horizontal, tr("E-Mail"));

model->select();

ui->tableView_person->setModel(model);
ui->tableView_person->setSortingEnabled(true);
ui->tableView_person->setAlternatingRowColors(true);

}

void hauptprogramm::on_tableView_person_clicked(QModelIndex index){

QSqlTableModel *model = new QSqlTableModel(ui->tableView_adresse);
QSqlTableModel *model2 = new QSqlTableModel(ui->tableView_person);
model->setTable("adresse");
model->setEditStrategy(QSqlTableModel::OnFieldChange);

model->setSort(1, Qt::AscendingOrder);

model->setFilter("pfl_id=1");//hier soll mal die ID von der angeklickten ZEILE stehen

model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Staße"));
model->setHeaderData(2, Qt::Horizontal, tr("Haus-Nr."));
model->setHeaderData(3, Qt::Horizontal, tr("PLZ"));
model->setHeaderData(4, Qt::Horizontal, tr("Ort"));
model->setHeaderData(5, Qt::Horizontal, tr("Land"));
model->setHeaderData(6, Qt::Horizontal, tr("Postfach"));
model->select();


ui->tableView_adresse->setModel(model);
ui->tableView_adresse->setSortingEnabled(true);
ui->tableView_adresse->setAlternatingRowColors(true);

}
model->setHeaderData(0, Qt::Horizontal, tr("ID"));
model->setHeaderData(1, Qt::Horizontal, tr("Staße"));
model->setHeaderData(2, Qt::Horizontal, tr("Haus-Nr."));
model->setHeaderData(3, Qt::Horizontal, tr("PLZ"));
model->setHeaderData(4, Qt::Horizontal, tr("Ort"));
model->setHeaderData(5, Qt::Horizontal, tr("Land"));
model->setHeaderData(6, Qt::Horizontal, tr("Postfach"));
Jetzt möchte ich es hinbekommen das wenn ich in der ersten Tabelle eine Zelle anklicke, die ID der ZEILE genommen wird und damit die zweite Tabelle mit Leben gefüllt wird. Es ist im grunde sehr einfach was ich vor habe aber ich komme einfach nicht auf die erste ZELLE einer ZEILE :(

Das Bild hilft denke ich sehr was mein Problem angeht.

mein bisheriger Quellcode:
Dateianhänge
Bildschirmfoto2.png
Bildschirmfoto2.png (93.09 KiB) 2876 mal betrachtet
binnio
Beiträge: 9
Registriert: 5. Juni 2010 13:08

Beitrag von binnio »

Ok habe die Lösung :) EIgentlich total einfach wenn man nicht ein leeres Model anspricht :)

Code: Alles auswählen

void hauptprogramm::on_action_connect_triggered()
{
    if(mSQLManager.connect()){
        ui->statusBar->showMessage((QString("Datenbank-Driver:").append(mSQLManager.get_mDb().driverName().append("\nVerbingung erfolgreich aufgebaut"))));
    }else{
        ui->statusBar->showMessage(mSQLManager.get_mDb().lastError().driverText());
    }

    //QSqlQueryModel *model = new QSqlQueryModel(ui->tableView_person);
    //model->setQuery("SELECT * from person");

    mPerson_model = new QSqlTableModel(ui->tableView_person);
    mPerson_model->setTable("person");
    mPerson_model->setEditStrategy(QSqlTableModel::OnFieldChange);
    mPerson_model->setSort(1, Qt::AscendingOrder);

    mPerson_model->setHeaderData(0, Qt::Horizontal, tr("ID"));
    mPerson_model->setHeaderData(1, Qt::Horizontal, tr("Vorname"));
    mPerson_model->setHeaderData(2, Qt::Horizontal, tr("Nachname"));
    mPerson_model->setHeaderData(3, Qt::Horizontal, tr("Geburtsdatum"));
    mPerson_model->setHeaderData(4, Qt::Horizontal, tr("Telefon"));
    mPerson_model->setHeaderData(5, Qt::Horizontal, tr("Handy"));
    mPerson_model->setHeaderData(6, Qt::Horizontal, tr("Fax"));
    mPerson_model->setHeaderData(7, Qt::Horizontal, tr("E-Mail"));

    mPerson_model->select();
    //model->setQuery("SELECT * FROM person");


    ui->tableView_person->setModel(mPerson_model);
    ui->tableView_person->setSortingEnabled(true);
    ui->tableView_person->setAlternatingRowColors(true);
    //ui->tableView_person->setEditTriggers(QAbstractItemView::NoEditTriggers);


}

void hauptprogramm::on_pushButton_clicked(){
    close();
}

void hauptprogramm::on_tableView_person_clicked(QModelIndex index){

    mAdresse_model = new QSqlTableModel(ui->tableView_adresse);
    mAdresse_model->setTable("adresse");
    mAdresse_model->setEditStrategy(QSqlTableModel::OnFieldChange);
    mAdresse_model->setSort(1, Qt::AscendingOrder);

    mAdresse_model->setFilter(QString("pfl_id=%1").arg(index.sibling(index.row(),0).data().toString())); //hier soll mal die ID von der angeklickten ZEILE stehen

    mAdresse_model->setHeaderData(0, Qt::Horizontal, tr("ID"));
    mAdresse_model->setHeaderData(1, Qt::Horizontal, tr("Staße"));
    mAdresse_model->setHeaderData(2, Qt::Horizontal, tr("Haus-Nr."));
    mAdresse_model->setHeaderData(3, Qt::Horizontal, tr("PLZ"));
    mAdresse_model->setHeaderData(4, Qt::Horizontal, tr("Ort"));
    mAdresse_model->setHeaderData(5, Qt::Horizontal, tr("Land"));
    mAdresse_model->setHeaderData(6, Qt::Horizontal, tr("Postfach"));
    mAdresse_model->select();


    ui->tableView_adresse->setModel(mAdresse_model);
    ui->tableView_adresse->setSortingEnabled(true);
    ui->tableView_adresse->setAlternatingRowColors(true);

}
Antworten