Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi MSSql, Zeos und Umlaute (https://www.delphipraxis.net/167423-mssql-zeos-und-umlaute.html)

citybreaker 29. Mär 2012 07:24

Datenbank: MSSql • Version: 2008 • Zugriff über: Zeos

MSSql, Zeos und Umlaute
 
Hallo,
wenn ich Umlaute über ein TEdit in eine Mssql Datenbank schreibe wird dieses irgendwie nicht richtig angezeigt.
Das Wort "für" wird "für". Wenn ich allerdings einen Eintrag mir einen Umlaut dierekt über das Sql Server Managment Studio
hinzufügen passiert das nicht.

Auch wenn ich eine Abfrage mache nach einem bestimmten Wort, nehmen wir an ich habe einen Eintrag über das Studio gemacht mit dem
Wort "für" und jetzt Filter ich alle Einträge wo dieses drinne vorkommt, wird dieser Eintrag nicht angezeigt. Im Managment Studio
hingegen funktioniert diese Abfrage einwandfrei.
Code:
SELECT * FROM tbl1 WHERE AnzeigeTxt='für' ORDER BY ID;
Kann das an irgendwie an Zeos liegen, dass ich irgend eine wichtige Einstellung übersehen habe?

Bernhard Geyer 29. Mär 2012 07:38

AW: MSSql, Zeos und Umlaute
 
Da wird wohl in ZEOS irgendwo eine unnötige UTF8-Codierung drin sein. MS SQL kann Unicode auf textfeldern (Wenn man die n-Version (nvarchar statt varchar) verwendet seit ca. 15 Jahren. Such mal in den Connection/Table/Query-Properties ob du irgendwas mit UTF8 entdeckst.

Tonic1024 29. Mär 2012 07:44

AW: MSSql, Zeos und Umlaute
 
versuch dies:

Delphi-Quellcode:
  SQLCnx:=TZConnection.Create(nil);
  with SQLCnx do
  begin
    // Ein Firebird standard Connection
    Protocol:= 'firebird-2.1';
    HostName:= '127.0.0.1';
    Database:= 'c:\datenbank\Dings.fdb';
    User := 'sysdba';
    Password:= 'masterkey';

    // hier das Zeos UTF8 Zeugs
    Properties.Clear;
    Properties.Add('character_set_client=utf8');
    Properties.Add('character_set_connection=utf8');
    Properties.Add('character_set_database=utf8');
    Properties.Add('character_set_results=utf8');
    Properties.Add('character_set_server=utf8');
    Properties.Add('character_set_system=utf8');
    Properties.Add('collation_connection=utf8_general_ci');
    Properties.Add('collation_database=utf8_general_ci');
    Properties.Add('collation_server=utf8_general_ci');
    Properties.Add('Codepage=utf8');
  end;
Solle so ähnlich auch für MSSQL funktionieren. Von den Properties ist sicher noch einiges überflüssig. Einfach mal testen welche Zeile für dich relevant ist.

[Edit]Ich verwende Zeos 7 mit D2k9 - sollte also vergleichbar sein.[/Edit]

Gruß,

Toni

Bernhard Geyer 29. Mär 2012 08:46

AW: MSSql, Zeos und Umlaute
 
Zitat:

Zitat von Tonic1024 (Beitrag 1159171)
versuch dies: ...

Solle so ähnlich auch für MSSQL funktionieren.

Wird nix bringen da MS SQL ein Unicdefähiges-Transportprotokoll hat das nicht solche Einstellungen benötigt. Ebenfalls arbeite die Datenbank (wenn man n-datentypen verwendet) mit UTF-16.

citybreaker 30. Mär 2012 07:38

AW: MSSql, Zeos und Umlaute
 
Zitat:

Zitat von Bernhard Geyer (Beitrag 1159169)
Da wird wohl in ZEOS irgendwo eine unnötige UTF8-Codierung drin sein. MS SQL kann Unicode auf textfeldern (Wenn man die n-Version (nvarchar statt varchar) verwendet seit ca. 15 Jahren. Such mal in den Connection/Table/Query-Properties ob du irgendwas mit UTF8 entdeckst.

Habe jetzt mal die Properties von TZConnection und TZQuery überprüft, allerdings ist dort nirgendwo etwas eingetragen.
In einem anderen Forum hab ich gelesen das es reicht als Datentyp in der Tabelle für die Spalten vchar zu verwenden, allerdings habe ich noch immer das selbe Problem.

Tonic1024 19. Apr 2012 08:14

AW: MSSql, Zeos und Umlaute
 
Hab grad nen Workaround für den Zeos Unicode Bug herausgefunden.

Delphi-Quellcode:
  sTest:='Möööp!';

//  Geht so nicht wegen dem Unicode Bug der Zeos Komponenten
//  QryFelderweiterung.SQL.Text:='UPDATE Tabelle SET Feld1 = '''+sTest+''' WHERE ID = 2';

  QryFelderweiterung.SQL.Clear;
  QryFelderweiterung.SQL.add('UPDATE '+Tabelle+' SET Feld1 = :w0 WHERE ID = 2';
  QryFelderweiterung.Prepare;
  QryFelderweiterung.Params[0].Value:=sTest;
  QryFelderweiterung.ExecSQL;
Ich verwende Firebird und ein Zeos 7 aus dem SVN, ist aber schon einige (viele) Monate alt. Vielleicht hilfts Einem.

Gruß,

Toni

jobo 19. Apr 2012 10:33

AW: MSSql, Zeos und Umlaute
 
Hast Du irgendwo schon erwähnt, wie Deine DB codiert ist und welche Textfeldtypen Du verwendest ((N-)VarChar, (N-)Char, ..)?
M.E. ist es nicht zwingend notwendig, eine ordentliche Codierung anzugeben, um erfolgreich Multibyte Zeichen in ein SingleByte Feld einzutragen, es könnte aber hilfreich sein.


Alle Zeitangaben in WEZ +1. Es ist jetzt 16:20 Uhr.

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