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;
Code: Alles auswählen
SELECT * from "MyTable";
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)