QSql... Klassen - Probleme bei PostgreSQL?

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

QSql... Klassen - Probleme bei PostgreSQL?

Beitrag von Tilman Räger »

Hallo,

Bei der Verwendung von PostgreSQL parellel zu MySQL ist mir ein Problem der QSql-Klassen in Verbindung mit PostgreSQL aufgefallen - vielleicht kennt ja jemand das Problem und hat sich schon eine vernünftige Strategie ausgedacht, damit umzugehen :-)

Das Problem ist folgendes:
PostgreSQL hat bei der Benennung von Tabellen und Spalten ein etwas merkwürdiges Vorgehen - alle Namen werden in Kleinbuchstaben umgesetzt, es sei denn, sie wurden in doppelten Hochkommata eingegeben. Also:
die 3 folgenden Zeilen

Code: Alles auswählen

SELECT * FROM MyTable;
SELECT * FROM MYTABLE;
SELECT * FROM mytable;
werden gleich behandelt - die Tabelle heisst, wenn man genauer hinschaut 'mytable'. Anders behandelt wird dagegen das (nicht ganz SQL-Standard-konforme Statement:

Code: Alles auswählen

SELECT * from "MyTable";
hier muss die Tabellle tatsächlich 'MyTable' heißen, sonst wird sie nicht gefunden.
An und für sich könnte man ja damit leben, wenn jetzt bei der Qt-Entwicklung konsistent der eine oder andere Weg gegangen worden wäre. Nur ist mir leider jetzt aufgefallen, das die meisten Funktionen der QSql-Klassen Tabellen- und Spaltennamen offensichtilich in doppelte Hochkommata setzten - die Beachtung der Groß-Klein-Schreibung ist also erforderlich, einige Funktionen oder Klassen gehen jedoch den anderen Weg.

z.B.: Die Abfrage von Werten mit der Funktion QSqlRecord::value(const QString) erfordert eine Beachtung der Schreibweise, sonst wird der Wert nicht gefunden.
Gegenbeispiel:
Hat man eine Tabelle mit Groß- und Keinbuchstaben (z.B. 'MyTable') so muss man in der Funktion QSqlTableModel::setTable(QString) den Namen in doppelte Hochkomma setzen, sonst wird die Tabelle nicht gefunden. Leider gibt es aber anscheinend auch keine eindeutige Fehlermeldung (oder ich habe noch nicht geschafft, sie abzufangen) - so das man zuerst ein wenig wie ein Ochs vor dem neuen Scheunentor steht.

Wie gesagt, ist dieses Verhalten auch schon jemand anderem aufgefallen und er hat einen Weg gefunden, das ganze zu umgehen (ohne jetzt die gesamte Datenbank neu aufzusetzen und alle Bezeichner auf Kleinbuchstaben umzudrehen? Oder habe ich mich vielleicht geirrt und das Problem sitzt mal wieder ganz woanders (meist VOR der Tastatur :-) ?

Gruss
Tilman (Räger)
Antworten