![]() |
Datenbank: MSSQL • Version: 2005 • Zugriff über: ADO
Strings mit Umlaute aus MSSQL lesen oder schreiben
Hallo
Ich hab da ein Problem beim Lesen oder Schreiben von Strings die Umlaute enthalten. Die vermeintliche Lösung die ich da zu haben meinte ![]() funktionierte nur einmal. Inzwischen bin ich mir gar nicht mehr so sicher, ob es überhaupt einmal funktioniert hatte. Da es sich eh um eine ganz andere Problematik handelt, eröffne ich ein neues Thema. Die DB auf die ich zugreife ist nicht von mir und die darf ich auch nicht ändern. Die Tabelle "GROUP_" hat die Spalten: ID : smallint-----NAME_ : nvarchar(50) 1--------------------u 2--------------------ü Mein Problem äussert sich so: Lesen - WHERE NAME_ = u -> RecordCount = 1 - WHERE NAME_ = ü -> RecordCount = 0 - WHERE ID = 2 -> FieldByName(NAME_) = ü Schreiben mit UPDATE - SET NAME_ = u -> in der Tabelle steht: u - SET NAME_ = ü -> in der Tabelle steht: u Wenn ich auf demselben Server eine neue DB erstelle und darin eine "gleiche" Tabelle eröffne, funktioniert alles. Hat jemand eine Idee wo es hapert? Vielen dank für eine antwort. Gruss Daniel |
Re: Strings mit Umlaute aus MSSQL lesen oder schreiben
Hallo
Ich bin der Sache ein bisschen näher gekommen. In der Datenbank die nicht funktioniert, ist die Sortierung: Cyrillic_General_CI_AS Die DB in die ich Umlaute schreiben kann hat: Latin1_General_CI_AS Wenn ich auf der DB in die ich keine Umlaute schreiben kann die Sortierung auf Latin1_General_CI_AS ändere funktioniert es. Leider darf ich das nicht machen, da es nicht meine DB ist. :? Mit "SQL Server Management Studio Express" kann ich aber in dieselbe DB Umlaute ohne Probleme schreiben. In den Verbindungseigenschaften von "SSMSE" steht bei Sortierung: Latin1_General_CI_AS Kann ich so etwas bei der ADOConnection auch machen Gruss Daniel |
Re: Strings mit Umlaute aus MSSQL lesen oder schreiben
Ich denke mal dein Anwendung teilweise falsch die SQL-Anweisungen zusammenbaust und du schickst die daten als varchar und nicht als nvarchar zur DB.
Stell dein Programm auf Verwendung von Parametern um. Dort solltest du auch als Parametertyp Widestring anwählen können. |
Re: Strings mit Umlaute aus MSSQL lesen oder schreiben
Hallo
Irgendwie klappt das nicht. Die Parametrisierten Abfragen ergaben kein Ergebnis Bei Umlauten Ich bin beim suchen, hier im Forum, darauf gestossen dass COLLATE auch in der Abfrage eingebunden werden kann. Sofern es richtig ist so wie ich es anwende? :gruebel:
Delphi-Quellcode:
Jedenfalls funktioniert es, leider auch nur ohne Umlaute.
procedure TForm1.Abfrage;
begin with ADOQuery1 do Begin Close; SQL.Text:= 'SELECT '+ '* '+ 'FROM '+ 'GROUP_ g '+ 'WHERE '+ 'g.NAME_ = :KundenName '+ 'COLLATE '+ 'Latin1_General_CI_AS '; ParamCheck := True; Parameters.ParamByName('KundenName').Value := Edit1.Text; Open; end; //Query1 anzahl freie ISDN Basisanschlüsse ermitteln ADOQuery1.First; Label1.Caption := IntToStr(ADOQuery1.RecordCount); Label2.Caption := ADOQuery1.FieldByName('NAME_').AsString; Label3.Caption := ADOQuery1.FieldByName('ID').AsString; end; Ich bin wirklich bald am verzweifeln. Wieso kann ich zwar Umlaute aus der Tabelle anzeigen lassen, aber nicht danach suchen? :wall:
Delphi-Quellcode:
Label2 zeigt korrekt die Kundennamen mit Umlauten.
procedure TForm1.Abfrage;
begin with ADOQuery1 do Begin Close; SQL.Text:= 'SELECT '+ '* '+ 'FROM '+ 'GROUP_ g '+ 'WHERE '+ 'g.ID = :KundenNummer '+ 'COLLATE '+ 'Latin1_General_CI_AS '; ParamCheck := True; Parameters.ParamByName('KundenNummer').Value := Edit1.Text; Open; end; //Query1 anzahl freie ISDN Basisanschlüsse ermitteln ADOQuery1.First; Label1.Caption := IntToStr(ADOQuery1.RecordCount); Label2.Caption := ADOQuery1.FieldByName('NAME_').AsString; Label3.Caption := ADOQuery1.FieldByName('ID').AsString; end; Gruss Daniel |
Alle Zeitangaben in WEZ +1. Es ist jetzt 22:55 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz