Darstellung von Datenbanken

Alles rund um die Programmierung mit Qt
Antworten
Tilman Räger
Beiträge: 189
Registriert: 6. Juni 2007 15:23
Wohnort: Göttingen

Darstellung von Datenbanken

Beitrag von Tilman Räger »

Hallo,

Ich sitze momentan an einem kleineren Datenbank-Programm und habe da einige Probleme mit den Views:
- bei einem Join zweier Tabellen habe ich das Problem, das die Tabellen z.T. gleichnamige Felder enthalten. Wie kann ich im View bzw. Model (QTableView - QSqlQueryModel) auf die entsprechenden Felder einer der beiden Tabellen gezielt zugreifen (oder ist es nicht möglich) - über den Feldnamen bekomme ich jedesmal den Namen ohne Spezifikation der Tabelle.
- Wenn ich Datensätze einfüge / ändere / lösche sollen diese Änderungen sofort in die Anzeige des Tabelleninhaltes übernommen werden. Beim vorher verwendeten QSqlTableModel reichte ein Aufruf von select(), hier nun kann ich mit QSqlQueryModel::query().exec() zwar die Query neu ausführen, die Änderungen werden aber erst wirksam, wenn ich in den TableView klicke. Beim Löschen eines Datensatzes wird dann auch die Anzahl der Zeilen im TableView nicht angepasst. Was muss ich machen, um die Änderungen sofort anzuzeigen?
- Ich habe verschiedene Tabellen z.T. mit einer 1:n -Beziehung (d.h. direkter Join der beiden Tabellen funktioniert) z.T. auch mit einer n:m-Beziehung, d.h. ich habe eine weitere Tabelle, die die möglichen Kombinationen enthält. Nun möchte ich in einem View ein paar spezieller Dinge anzeigen und zwar :
a) Anstelle der einzelnen Felder der einen Tabelle möchte ich eine Kombination verschiedener Feldinhalte in einem einzelnen Feld anzeigen
b) bei den Tabellen mit n:m-Beziehung soll beim View der einen Tabelle für jeden Datensatz angezeigt werden, mit wievielen Datensätzen der 2. Tabelle er verknüpft ist.
Ist so etwas mit Delegates möglich (falls ja, irgendwelche Tips, wie ich vorgehen kann? ) oder muss ich hierzu das ganze in eine temporäre Tabelle auslesen und dann diese anzeigen?

Für alle Antworten schon einmal im Voraus Danke.

mit freundlichen Grüßen

Tilman (Räger)
odt
Beiträge: 128
Registriert: 12. August 2010 11:49
Kontaktdaten:

Re: Darstellung von Datenbanken

Beitrag von odt »

Hoi Tilman

Im QSqlQuery kann man einen Field-Value per Index auslesen. Vermutlich bietet QSqlQueryModel dies auch. In der Doku ist mir record().field() aufgefallen.
Von der Ferne fällt es mir schwer, Dir konkret zu antworten.
A) Mach ein berechnetes Feld/Methode
B) select a.x, a.y, count( 1) from a, b group by a.x, a.y
Sobald jedoch Datenmanipulationen möglich/berücksichtigt werden sollen: Klimmzüge. Eine temporäre Tabelle ist vermutlich nicht die beste Lösung.

Gibt es einen Grund, warum Du eine zweischichtige Architektur hast?

Ich habe schon einige solcher Anwendungen gesehen, nicht in Qt aber in Delphi, Java, C# und Access. Bei Allen war meiner Erfahrung der erste Wurf sehr schnell gemacht, sie litten langfristig aber an vielem unübersichtlichem Code, mässiger Performance und grossem Aufwand.

Viele Grüsse
Reto
ODT Informatik GmbH, Reto Tschofenig
Antworten