Seite 1 von 1

SQL Tabellen- und Feldnamen Probleme

Verfasst: 24. Juli 2007 06:03
von qtagent
Morgen

Ich benutze Qt 3.3 auf Freebsd 6.2.

Ist es möglich Grossbuchstaben und Leerzeichen als Tabellen- und Feldnamen zu verweden?
Ich bekomm mit folgendem Bsp. immer Zugriffsprobleme:

sqlDatabase->tables().contains("tabellenName");
sqlCursor->select(sqlCursor->index("feldName");

bzw. auch mit:

sqlDatabase->tables().contains("tabellen Name");
sqlCursor->select(sqlCursor->index("feld Name");

Generell sollte ja nach SQL 92 durch anwendung von "..." Grossbuchstaben (Case-Sensitive) und Leerzeichen möglich sein. Da ich aber obigen Bsp. Code benutze, ist die Frage, ob Qt diese automatisch als "..." sendet oder ob ich es manuell eingeben muss bzw. kann.

Gruss
qtagent

Verfasst: 24. Juli 2007 09:04
von upsala
Qt sendet das, was du vorgegeben hast. Und das Logging deiner Datenbank hätte dir das auch verraten. Außerdem würde ich mit nicht auf SQL92 verlassen, sondern das was deine Datenbank-Doku sagt.

Verfasst: 24. Juli 2007 10:48
von qtagent
Hi
Qt sendet das, was du vorgegeben hast. Und das Logging deiner Datenbank hätte dir das auch verraten. Außerdem würde ich mit nicht auf SQL92 verlassen, sondern das was deine Datenbank-Doku sagt.
Ich verwende Postgresql 7.4 und hab jetzt die log Datei überprüft, ausgegeben wurde:

* * * xxx postgres[1979]: [1-1] ERROR: relation "tabellenname" does not exist

Wie aus der log Datei ersichtlich und den obigen verwendeten Quellcode auschnitt, wird nicht die Tabelle "tabellenName" angefragt sondern eben "tabellenname". Qt fragt komischerweise nicht die gewünschte Tabelle an. Ist es möglich Qt dazu zu bringen, den Richtigen Tabellen Name bzw. Case-Sensitive zu verwenden?

Ach ja, Postgresql unterstützt Leerzeichen und Case-Sensitive in Tabellennamen und Tabellenfelder. Ausserdem funktioniert die Tabellen anfrage wenn ich ausschliesslich "tabellenname" und nicht "tabellenName" verwende, wäre aber toll, wenn ich eben "tabellenName" benutzen könnte, was ja eigentlich auch gehen sollte.

Gruss
qtagent

Verfasst: 24. Juli 2007 12:26
von upsala
Meines Wissens konvertiert postgres alle Tabellen und Spaltennamen in Kleinbuchstaben. Du kannst es ja mal mit psql testen, was dann im Log-File steht.

Verfasst: 29. Juli 2007 10:25
von qtagent
hi
Meines Wissens konvertiert postgres alle Tabellen und Spaltennamen in Kleinbuchstaben. Du kannst es ja mal mit psql testen, was dann im Log-File steht.
Das PostgreSQL die Tabellennamen in Kleinbuchstaben konvertiert und Leerzeichen nicht akzeptiert kann nicht stimmen. Ich kann problemlos Tabellen in gross und klein Buchstaben wie auch Leerzeichen mit pgAdmin III erstellen.
Ausserdem empfange ich durch:

sqlDatabase->tables().contains("tabellenName");

die Tabelle exakt als "tabellenName" und nicht als "tabellenname". Auch das auslesen der gesammten sqlDatabase->tables() zeigt keine konvertierung weiterer vorhandenen Tabellenname. In der Log Datei von PostgreSQL, ist ersichtlich, dass die Anfrage von "tabellenName" durch Befehl:

sqlCursor->select(sqlCursor->index("feld"));

Qt nicht "tabellenName" sondern eben "tabellenname" selektiert und somit es zum Fehler kommt. Gibt es eine möglichkeit, Qt zu erklären, dass es "tabellenName" nicht in klein Buchstaben konvertieren soll?

Desweiteren ist momentan klar, das Feldnamen nach Qt Doku nur in klein Buchstaben möglich sind, auch wenn dies bei PostgreSQL nicht eingeschränkt ist.

Gruss
qtagent

Verfasst: 29. Juli 2007 19:16
von upsala
Laut Doku:
SQL-SYNTAX-IDENTIFIERS

Gilt folgendes:
Identifier and key word names are case insensitive.
So müßte Groß-/Kleinschreibung egal sein. Mit psql ist es das auch. Mit Qt kann ich es im Moment nicht testen.