Hallo,
ich habe ein LineEdit, damit suche ich Begriffe aus einer sql Tabelle, zeige die Begriffe in einer QSqueryModel-Tabelview an und jetzt soll das System, wenn eine Zeile im Modell angeklickt wurde, anhand von z.B Feld 2 in einer zweiten Tabelle nach dem Feld suchen und in einem weiteren LineEdit anzeigen werden.
Ich wollte nicht mit einer Relation arbeiten (ich müsste zu viele erstellen) sondern nur query( select Feld2 from ..where .. )
Ein Feld aus dem aktiven Modell zusätzlich in einem LineEdit klappt eindeutig aber wie komme ich z.B an das Feld 2, es ist und soll nicht im Modell sichtbar sein.
Wenn ich sage query(select Felder aus Tabelle2 where aktiveTabelle.Feld2 = Tabelle2.Feld2)
bekomme ich folgende Fehlermeldung "QSqlQuery::value: not positioned on a valid record"
Ich vermute, dass mit der query Anweisung nicht das aktive Feld2 ermittelt wird und ich weiß nicht wie ich es anstellen soll.
Meine Funktion wird mit dem Modell wie folgt verbunden:
connect(suchView->selectionModel(), SIGNAL(currentChanged(const QModelIndex &, const QModelIndex &)),
this, SLOT(zeigSatz(const QModelIndex &)));
Über den Index habe ich die Zeile. Muss ich jetzt mit split sie in Felder aufteilen?
Muss doch über Relation gehen?
QsqlQueryModel
Suchst du das:
?
Ansonsten bitte [ code]-Tags verwenden, damit wird dein Code auch lesbar.
Falls du das nicht suchst, hab ich deine Frage nicht verstanden.
[edit] ich sehe gerade, dass dein Slot nur 1 Parameter hat. Somit ist mir unklar, wie das überhaupt funktionieren kann, dein connect müsste false zurückliefern. Beim Connect müssen Signal & Slot die gleichen Parameter haben.
Code: Alles auswählen
int col = index.column();
int row = index.row();
QSqlRecord record = model->record(row);
QSqlQuery q("select foo from bar where " + record.fieldName(col) + " = " + record.value(col).toString() );
Ansonsten bitte [ code]-Tags verwenden, damit wird dein Code auch lesbar.
Falls du das nicht suchst, hab ich deine Frage nicht verstanden.
[edit] ich sehe gerade, dass dein Slot nur 1 Parameter hat. Somit ist mir unklar, wie das überhaupt funktionieren kann, dein connect müsste false zurückliefern. Beim Connect müssen Signal & Slot die gleichen Parameter haben.
auf Datensätze aus dem Modell kannst Du mit der Funktion zugreifen und im LineEdit anzeigen;
void SucheSatzDialog::zeigSatz(const QModelIndex &index)
{
int row = index.row();
QVariant vsatz;
QString satz;
vsatz = suchModel->data(index);
satz = vsatz.toString();
gefundenEdit->setText(satz);
}
aber dann hast Du die Daten doppelt, einmal in der View und in der LineEdit
ich will aber den in der View angeklickten Satz aus einer andern Tabelle holen.
void SucheSatzDialog::zeigSatz(const QModelIndex &index)
{
int row = index.row();
QVariant vsatz;
QString satz;
vsatz = suchModel->data(index);
satz = vsatz.toString();
gefundenEdit->setText(satz);
}
aber dann hast Du die Daten doppelt, einmal in der View und in der LineEdit
ich will aber den in der View angeklickten Satz aus einer andern Tabelle holen.