Seite 1 von 1

QSQL - Zugriff

Verfasst: 17. Mai 2010 15:57
von Nvidia
Hallo
Ich hab einen TableView, in dem Daten aus einer Datenbank eingelesen werden.
Ich möchte nun, wenn der Benutzer auf ein Feld in dem TableView klickt, auf die ganze Zeile in dem SQLtable, in dem sich das Feld befindet auf das er geklickt hat zugreifen.
Der SQLtable sieht ja meines wissens so aus:
Feld1 Feld2 Feld3 ...
data1 data1 data1
data2 data2 data2
...
Wenn er im TableView nun auf Feld2;data2 zugreift möchte ich jetzt alle daten die sich in der reihe von data2 befinden, benutzen.
Nur wie finde ich die im Table wieder?
mit Select ist das schlecht möglich, da es ja sein kann, dass die daten doppelt oder dreifach in der datenbank liegen und nur das genau möchte, was angeklickt wurde.
ich hoffe ihr versteht was ich meine.
nvidia

Verfasst: 17. Mai 2010 16:06
von RHBaum
Normal hat doch jeder Datensatz in ner SQL DB nen Primaerkey ?
Wenn selber keinen anlegst, kann sein dass die DB da auch selbsttaetig was macht (Oracle, rownumber z.b.) je nach tabellentyp.
Die Keys kannst iin ner unsichtbaren stalten halten ..
Falls es wirklich ne freie tabelle iss, und du die Zeilennummern verwischst (sortierung oder so) dann hasst wirklich Pech. Dann unterstuetzt diese tabelle keinen eindeutigen zugriff auf die datensaetze, wenn die datensaetze nicht eindeutig sind ... dann musst du dir was komplett anderes einfallen lassen....

Ciao ...

Verfasst: 17. Mai 2010 16:20
von Nvidia
Würde das hier gehen:
Ich les die daten geordnet ein in den TableView.
Blende die primary key spalte aus.
Beim klick auf den Namen les ich die Zeilennr im tableview aus(geht das ohne vergleich des namens?)
Les von der Zeilennr aus den Primery key und kann dann auf die daten zugreifen?

Verfasst: 17. Mai 2010 16:49
von upsala
Ja, du bekommst doch den QModelIndex mit sämtlichen Informationen.

Verfasst: 17. Mai 2010 18:32
von Nvidia
gibst da irgentwo ein beispiel, wo man sieht wie das funktioniert, aus der doku werd ich nicht wirklich schlau
danke
nvidia

Verfasst: 17. Mai 2010 18:50
von upsala
Du dürftest doch inzwischen wissen, wo die Demos und Examples zu finden sind.

Verfasst: 19. Mai 2010 16:44
von Nvidia
hab mir alle SQL Beispiele durchgelesen. Aber nichts was das hier benutzt.
Außerdem bauen alle Beispiele darauf auf, dass er die Daten gleich in der Tabelle eingibt.
Ich kann daten einfügen und lesen. Aber wie führe ich die Update funktion aus?
Mit prepare wird sie ja nur vorbereitet.

Re: QSQL - Zugriff

Verfasst: 20. Mai 2010 12:10
von Troll.Soft
Nvidia hat geschrieben:Wenn er im TableView nun auf Feld2;data2 zugreift möchte ich jetzt alle daten die sich in der reihe von data2 befinden, benutzen.
Nur wie finde ich die im Table wieder?
Du mußt QModelIndex benutzen. Das hat z.b. eine funktion data() die einen QVariant liefert (ist dein Datum aus row, col). An QModelIndex kommst Du über SignalSlot heran. Und über QModelIndex kommst Du auch an alle anderen Daten heran. Ist etwas eigenartig, wenn man es das Erste Mal macht.
tschüß
Reinhold

Verfasst: 21. Mai 2010 15:54
von Nvidia
habs nun mit eine QSQLtablemodel gemacht.
es klappt nun, aber ich krieg diesen Fehler:
wie beheb ich das?
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.

b)
Ich hab eine TableView und der Benutzer kann beliebig viele neue erstellen.
Was ist sinnvoller
1) ich erstelle eine große Datenbank und führe eine Spalte mit Gruppe.
Beim Einlesen in die Tabelle filter ich alle raus, die nicht den gruppenamen haben.
Wenn Daten von einem View zum anderen Verschoben wird, müsste ich nur den Gruppennamen änderen.
2) ich erstelle für jeden View einen Table

Verfasst: 21. Mai 2010 16:26
von Troll.Soft
Nvidia hat geschrieben:habs nun mit eine QSQLtablemodel gemacht.
es klappt nun, aber ich krieg diesen Fehler:
wie beheb ich das?
QSqlDatabasePrivate::removeDatabase: connection 'qt_sql_default_connection' is still in use, all queries will cease to work.
erstmal die connection closen

Verfasst: 21. Mai 2010 16:30
von Nvidia
die connection trennen, wenn das hauptfenster geschlossen wird?

Verfasst: 21. Mai 2010 20:31
von Troll.Soft
vor dem remove trennen

Verfasst: 21. Mai 2010 22:04
von Nvidia
ich hab keine remove methode geschrieben?!

Verfasst: 21. Mai 2010 22:45
von franzf
Du sollst auch keine schreiben. Er meint QSqlDatabase::removeDatabase(). Wenn du das nicht selber aufgerufen hast, dann brauchen wir etwas Code.

Verfasst: 22. Mai 2010 00:09
von Nvidia
Welchen Code braucht ihr?

Ich hab nichts besonderes gemacht.
Eine Datenbank aufgemacht
und mit Querys Table erschaffen und befüllt und ausgelesen.
Sonst hab ich nichts mit der Datenbank gemacht.