QSqlTableModel mit Datenbank-View verwenden

Alles rund um die Programmierung mit Qt
Antworten
tsteinmaurer
Beiträge: 18
Registriert: 13. Juli 2007 10:15

QSqlTableModel mit Datenbank-View verwenden

Beitrag von tsteinmaurer »

Hallo,

ich möchte gerne auf eine View in einer SQLite Datenbank über QSqlTableModel verwenden. Leider werden mir hier keine Daten in Verbindung mit einer QTableView angezeigt. Mein Code sieht wie folgt aus:

[code]
QSqlTableModel model;
model.setTable("v_software_parameter");
mode.select();
...
QTableView view;
view.setModel(&model);
[/code]

Greife ich auf die physische Tabelle "software_parameter" anstatt von "v_software_parameter" zu, dann klappt das.

Ich könnte natürlich für den Zugriff auf die View auch ein QSqlQueryModel verwenden, aber dann verliere ich die Funktionalität zum Sortieren beim Klick auf den Header über QTableView::setSortingEnabled(true).

Hat jemand eine Idee?

Danke,
Thomas
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Welche Datenbank verwendest du? Was sagen die Logs der Datenbank, wie sieht 'v_software_parameter' aus? Funktioniert v_software_parameter mit einem anderem Db-Abfrage-Tool?
tsteinmaurer
Beiträge: 18
Registriert: 13. Juli 2007 10:15

Beitrag von tsteinmaurer »

Hi!

zu Deinen Fragen:

- Ich verwende SQLite 3

- Die View sieht wie folgt aus:
[code]
create view v_software_parameter
as select
id as ID
, name as Name
, default_value as "Default"
, parameter_unit as Unit
from
software_parameter
union
select
'DAT'
, 'Date'
, date(current_date, 'localtime')
, null
union
select
'TIM'
, 'Local Time'
, time(current_time, 'localtime')
, null
;
[/code]

- Die View v_software_parameter funktioniert mit einem anderen Abfrage-Tool, so auch mit QSqlQueryModel, in QT 4.2 jedoch nicht mit QSqlTableModel. Kann man QSqlTableModel überhaupt mit einer Datenbank-View verwenden?

Danke,
Thomas
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag von upsala »

Kanns hier im Moment nur mit MySQL testen und damit funktionieren die Views ohne Probleme. Interessant wäre jetzt noch was die Logfiles der Datenbank dazu sagen...
tsteinmaurer
Beiträge: 18
Registriert: 13. Juli 2007 10:15

Beitrag von tsteinmaurer »

Hallo,

ich hab nun das Problem gefunden. Es liegt an der Namensgebung der Felder in der View-Definition. Verwende ich in der View-Definition einen Feldnamen "Default", dann klappt der Zugriff auf die View mit QSqlTableModel nicht. Zum Beispiel:

[code]
create view v_software_parameter
as
select
id as Id
, name as Name
, default_value as "Default"
, parameter_unit as Unit
from
software_parameter
union
select
'DAT'
, 'Date'
, date(current_date, 'localtime')
, null
union
select
'TIM'
, 'Local Time'
, time(current_time, 'localtime')
, null
;
[/code]

Verwende ich z.B. Value als Feldnamen, z.b.:

[code]
create view v_software_parameter
as
select
id as Id
, name as Name
, default_value as Value
, parameter_unit as Unit
from
software_parameter
union
select
'DAT'
, 'Date'
, date(current_date, 'localtime')
, null
union
select
'TIM'
, 'Local Time'
, time(current_time, 'localtime')
, null
;
[/code]

Dann klappt auch der Zugriff mit QSqlTableModel.


Thomas
Antworten