SQL Tabellen- und Feldnamen Probleme

Alles rund um die Programmierung mit Qt
Antworten
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

SQL Tabellen- und Feldnamen Probleme

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
qtagent
Beiträge: 19
Registriert: 28. Mai 2007 21:36
Wohnort: Schwiiz | Schweiz | Switzerland | Suisse | Svizzera | Svizra

Beitrag 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
upsala
Beiträge: 3946
Registriert: 5. Februar 2006 20:52
Wohnort: Landshut
Kontaktdaten:

Beitrag 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.
Antworten