QSQL - Zugriff

Alles rund um die Programmierung mit Qt
Antworten
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

QSQL - Zugriff

Beitrag 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
RHBaum
Beiträge: 1436
Registriert: 17. Juni 2005 09:58

Beitrag 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 ...
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

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

Beitrag von upsala »

Ja, du bekommst doch den QModelIndex mit sämtlichen Informationen.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

gibst da irgentwo ein beispiel, wo man sieht wie das funktioniert, aus der doku werd ich nicht wirklich schlau
danke
nvidia
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Du dürftest doch inzwischen wissen, wo die Demos und Examples zu finden sind.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag 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.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Re: QSQL - Zugriff

Beitrag 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
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag 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
Zuletzt geändert von Nvidia am 21. Mai 2010 16:29, insgesamt 1-mal geändert.
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag 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
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

die connection trennen, wenn das hauptfenster geschlossen wird?
Troll.Soft
Beiträge: 190
Registriert: 18. Juni 2008 09:52
Wohnort: Hamburg

Beitrag von Troll.Soft »

vor dem remove trennen
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

Beitrag von Nvidia »

ich hab keine remove methode geschrieben?!
franzf
Beiträge: 3114
Registriert: 31. Mai 2006 11:15

Beitrag von franzf »

Du sollst auch keine schreiben. Er meint QSqlDatabase::removeDatabase(). Wenn du das nicht selber aufgerufen hast, dann brauchen wir etwas Code.
Nvidia
Beiträge: 238
Registriert: 22. Februar 2010 21:23

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