Delphi-PRAXiS
Seite 1 von 2  1 2      

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Zeichensatz-Problem in Firebird (https://www.delphipraxis.net/45554-zeichensatz-problem-firebird.html)

hsbc 8. Mai 2005 13:54

Datenbank: Firebird • Version: 1.5.2 • Zugriff über: Delphi 7 Professional + Zeos-Lib.

Zeichensatz-Problem in Firebird
 
Hallo allerseits,

Ich verwende in meinen Tabellen den Zeichensatz ISO8859_1. Beim Aufruf von:

Delphi-Quellcode:
SELECT * FROM TEST WHERE (FELD1 >= 'ABC') AND (FELD1 <= 'BßC')
kommt die Fehlermeldung:

Zitat:

... String truncaction. Cannot transliterate character between character sets. ErrorCode -802.
Dies liegt am scharfen "ß" im zweiten Vergleich.

Auch die Änderung des Zeichensatzes auf WIN1252 brachte keinen Erfolg.

Jetzt meine Frage: Darf man Sonderzeichen, wie Umlaute, scharfes ß, etc. überhaupt nicht verwenden oder kann es nur die SELECT nicht auswerten? Da es sich bei den Vergleichen um Variable handelt, müsste ich ansonsten jedesmal vor dem Aufruf des SELECT den Inhalt der Vergleichsvariablen überprüfen und gegebenenfalls ändern, nur auf was?

mfg
Herbert

marabu 8. Mai 2005 17:07

Re: Zeichensatz-Problem in Firebird
 
Zitat:

Zitat von hsbc
Ich verwende in meinen Tabellen den Zeichensatz ISO8859_1.

Ich vermute, dass du zwar FELD1 mit der Klausel CHARACTER SET ISO8859_1 definiert hast, aber hast du auch beim Anlegen deiner Datenbank einen Default-Zeichensatz festgelegt?

Grüße vom marabu

hsbc 8. Mai 2005 18:16

Re: Zeichensatz-Problem in Firebird
 
Hallo marabu,

kann man eigentlich beim Erstellen der Tabellen oder vielleicht sogar beim Erstellen der Datenbank per SQL einen bestimmten Zeichensatz definieren, wenn ja, wie funktioniert das?

mfg
Herbert

Hansa 8. Mai 2005 18:37

Re: Zeichensatz-Problem in Firebird
 
Schon mal was von TDataBase gehört ? Guck mal da im OI unter ConnectionParams o.ä.

hsbc 8. Mai 2005 18:47

Re: Zeichensatz-Problem in Firebird
 
So, ich habe mir jetzt meine CREATE-Routine nochmals angesehen. Hier ist der Zeichensatz eingetragen.

Delphi-Quellcode:
        ZConnection.Properties.Add('CreateNewDatabase=CREATE DATABASE ' +
          QuotedStr(edDB.Text) +
          ' USER ' + QuotedStr(ZConnection.User) +
          ' PASSWORD ' + QuotedStr(ZConnection.Password) +
          ' PAGE_SIZE 4096 DEFAULT CHARACTER SET ISO8859_1');
        try
          ZConnection.Connect;
Es werden in den Tabellen auch sämtliche Umlaute und das scharfe ß richtig angeschrieben, nur wie gesagt beim Selektieren kommen dan die Probleme.

mfg
Herbert

Hansa 8. Mai 2005 19:12

Re: Zeichensatz-Problem in Firebird
 
Warum wollt ihr immer mit Datenbanken anfangen und zwar damit, die Aufgaben eines kostenlosen Admin-Tools nachzubauen ? :shock: 70 % aller Fehler, so auch dieser werden dadurch geradezu herbeigesehnt. Und 95% aller Projekte werden deshalb mittendrin eingestellt. Und dann heißt es Datenbanken seien zu schwer. Und jetzt ? Wer soll jetzt sagen woran das liegt, daß es nicht geht ? Es werden haufenweise Vermutungen kommen, die dir aber nichts nützen werden. Vielleicht ist allerdings ein Zufallstreffer dabei. Mit Sicherheit wird kommen : die Zeos sind sowieso buggy usw. Mein Tip : mache das nicht mit Delphi/Zeos/eigenes Programm. Lege die Datenbank zuerst an und teste sie auf Herz und Nieren am besten mit IBexpert. Besteht dann immer noch die Notwendigkeit ein Programm zu machen, um IBExpert nachzubauen oder sontwas, dann hast du wenigstens eine DB, die geht.

Jens Schumann 8. Mai 2005 19:17

Re: Zeichensatz-Problem in Firebird
 
Hallo,
ich verwende ebenfalls das Character Set ISO8859_1'
Ich deklariere einen Chartypen wie folgt
SQL-Code:
 "FELD"   VARCHAR(15) COLLATE DE_DE
Damot habe ich noch nie Probleme bekommen. Auch nicht mit deutschen Sonderzeichen

hsbc 8. Mai 2005 19:44

Re: Zeichensatz-Problem in Firebird
 
Ich glaube, wir reden einander ein wenig vorbei.

Es funktioniert an und für sich alles - es werden die Umlaute richtig dargestellt, es funktioniert der Ausdruck mit Umlauten, etc.

Nur - wenn das SELECT auf ein Datenfeld angewandt wird, so wie ich es hier verwende, wo ein bestimmter Bereich selektiert werden soll - und in diesem Bereich ein Datenfeld mit einem Umlaut vorkommt, dann kommt der Fehler.

So - Ich habe jetzt haarscharf denselben SELECT direkt in IBExpert eingegeben und siehe da - dort funktioniert es.

Was nun ?

mfg
Herbert

marabu 8. Mai 2005 19:52

Re: Zeichensatz-Problem in Firebird
 
Hallo Herbert,

den von dir beschriebenen Transliteration-Fehler kannst du nur vermeiden, wenn du beim Erzeugen der Datenbank einen Default-Zeichensatz (ISO8859_1 ist keine schlechte Wahl) angibst, beim Erzeugen der Tabellen auf die Angabe von CHARACTER SET verzichtest und beim Aufbau der Verbindung vom Client zum Server den Default-Zeichensatz der Datenbank erneut angibst.

Bei Beachtung dieser Regeln erwarte ich keine Schwierigkeiten - auch nicht bei SELECT Statements wie in deinem Beispiel. Wenn du den Fehler nicht in den Griff bekommst, dann kannst du einen Auszug der Metadaten oder eine kleine Testdatenbank posten.

marabu

hsbc 8. Mai 2005 21:19

Re: Zeichensatz-Problem in Firebird
 
Hallo marabu,

ich habe deine letzten Anweisungen der Reihe nach genau befolgt - und -

ES FUNKTIONIERT

Allerbesten Dank wieder einmal für eure Hilfe.

mfg
Herbert


Alle Zeitangaben in WEZ +1. Es ist jetzt 04:04 Uhr.
Seite 1 von 2  1 2      

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz