QsqlQueryModel

Alles rund um die Programmierung mit Qt
Antworten
sowas
Beiträge: 105
Registriert: 19. September 2006 16:02

QsqlQueryModel

Beitrag von sowas »

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?
pfid
Beiträge: 535
Registriert: 22. Februar 2008 16:59

Beitrag von pfid »

Suchst du das:

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

Beitrag von upsala »

Ein Slot darf immer weniger Parameter haben als das Signal.
sowas
Beiträge: 105
Registriert: 19. September 2006 16:02

Beitrag von sowas »

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