Discussion:
Case sensitive bei SQL funktioniert (manchmal) nicht!
(zu alt für eine Antwort)
Stefan Koschke
2011-11-30 12:07:33 UTC
Permalink
Hallo zusammen,

ich scheitere momentan am Verhalten des SQL-Servers 2008 bzw. am
Handling dessen Datenbanken durch Delphi:

Der SQL-Server ist CaseSensitive eingestellt, so daß

Select TCPIPadresse from ...
einen Fehler wirft, wenn das Feld in Wirklichkeit TCIPIAdresse heißt,
das ist auch in Ordnung.

Nun möchte ich Funktionen einbauen, mit denen ich (aus Fehlern der
Vergangenheit, in Access war das egal) falsch geschriebene Feldnamen
umbenennen kann.
Dafür möchte ich natürlich abfragen ob das falsch geschriebene Feld
existiert:

If Query.FindField('TCPIPadresse') <> Nil then...

und genau hier funktioniert CaseSensitive nicht mehr, auch wenn schon
das richtige TCPIPAdresse vorhanden ist, wird das Feld gefunden und das
nachfolgende Umbenennen geht in die Hose!

Hat jemand einen Tip wie ich das trotzdem lösen kann?

Danke
Ciao
Stefan
Christian Gudrian
2011-11-30 12:24:25 UTC
Permalink
Post by Stefan Koschke
und genau hier funktioniert CaseSensitive nicht mehr
Warum auch? Die Datenbank hat damit ja auch gar nichts zu tun. TQuery.FindField verwendet intern AnsiCompareText und ist somit case insensitive. Dir wird wohl kaum etwas anderes übrig bleiben, als selbst über die Liste der Feld zu iterieren, und dabei deine eigene Vergleichsfunktion zu verwenden, die Groß-/Kleinschreibung beachtet.

Christian
Stefan Koschke
2011-11-30 13:00:17 UTC
Permalink
Post by Christian Gudrian
Post by Stefan Koschke
und genau hier funktioniert CaseSensitive nicht mehr
Warum auch? Die Datenbank hat damit ja auch gar nichts zu tun. TQuery.FindField verwendet intern AnsiCompareText und ist somit case insensitive. Dir wird wohl kaum etwas anderes übrig bleiben, als selbst über die Liste der Feld zu iterieren, und dabei deine eigene Vergleichsfunktion zu verwenden, die Groß-/Kleinschreibung beachtet.
Christian
Hallo Christian,

danke für den Denkanstoß!

folgendes (gekürzt) funktioniert nun:

fieldlist := Tstringlist.Create;
fieldlist.CaseSensitive := true;
query.GetFieldNames(fieldlist);
if fieldlist.IndexOf('TCPIPadresse') <> -1 then
...

Ciao
Stefan
Stefan Graf
2011-11-30 16:12:30 UTC
Permalink
Post by Stefan Koschke
Hallo zusammen,
ich scheitere momentan am Verhalten des SQL-Servers 2008 bzw. am
Der SQL-Server ist CaseSensitive eingestellt, so daß
Select TCPIPadresse from ...
einen Fehler wirft, wenn das Feld in Wirklichkeit TCIPIAdresse heißt,
das ist auch in Ordnung.
Nun möchte ich Funktionen einbauen, mit denen ich (aus Fehlern der
Vergangenheit, in Access war das egal) falsch geschriebene Feldnamen
umbenennen kann.
Dafür möchte ich natürlich abfragen ob das falsch geschriebene Feld
If Query.FindField('TCPIPadresse') <> Nil then...
und genau hier funktioniert CaseSensitive nicht mehr, auch wenn schon
das richtige TCPIPAdresse vorhanden ist, wird das Feld gefunden und
das nachfolgende Umbenennen geht in die Hose!
Hat jemand einen Tip wie ich das trotzdem lösen kann?
Die Lösung wurde ja schon gefunden, aber ich möchte nur noch darauf
hinweisen, das das ganze eine Sackgasse ist, denn bei alle anderen
SQL-Engins - Oracle, PostgrSQL usw. - ist es egal ob man die
Spaltennamen groß oder klein schreibt.

Viele Tools und Komponenten beachten dies auch nicht. Das kann später
dann doch Problemen führen, da man ja im Extrermfall in einer Tabelle
mehre Spalten mit dem selben Namen aber eben groß oder klein geschrieben
finden kann.

Ich würde das lassen und den tieferen Sinn konnte ich auch nicht
erkennen, das mag aber an mir persönlich liegen ;-)
--
Stefan Graf
Joachim Duerr (ADS)
2011-11-30 18:18:26 UTC
Permalink
Post by Stefan Graf
Ich würde das lassen und den tieferen Sinn konnte ich auch nicht
erkennen, das mag aber an mir persönlich liegen ;-)
soviel mal wieder zum Thema MS und etablierte Standards;)
--
Joachim Duerr, Advantage Presales
*** NEW *** Advantage Pocket Guide released *** NEW ***
http://pocketguide.jd-engineering.de
Stefan Graf
2011-11-30 19:23:21 UTC
Permalink
Post by Joachim Duerr (ADS)
Post by Stefan Graf
Ich würde das lassen und den tieferen Sinn konnte ich auch nicht
erkennen, das mag aber an mir persönlich liegen ;-)
soviel mal wieder zum Thema MS und etablierte Standards;)
Nee, nee, ganz so schlimm ist es nicht. Bei MS SQL muss man diese Option
explizit einschalten ;-)
--
Stefan Graf
Peter
2011-11-30 18:27:04 UTC
Permalink
Post by Stefan Graf
Viele Tools und Komponenten beachten dies auch nicht. Das kann später
dann doch Problemen führen, da man ja im Extrermfall in einer Tabelle
mehre Spalten mit dem selben Namen aber eben groß oder klein
geschrieben finden kann.
Ich würde das lassen und den tieferen Sinn konnte ich auch nicht
erkennen, das mag aber an mir persönlich liegen ;-)
Ach, das sind alles diese von C/C++ geschädigten Typen, die glauben,
case-sensitivity wäre was Gutes ;-).
--
Peter Below
Lesen Sie weiter auf narkive:
Loading...