Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Datenbanken (https://www.delphipraxis.net/15-datenbanken/)
-   -   Delphi Strings mit Umlaute aus MSSQL lesen oder schreiben (https://www.delphipraxis.net/101195-strings-mit-umlaute-aus-mssql-lesen-oder-schreiben.html)

daniel71 9. Okt 2007 21:58

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
Ungültiger Spaltenname 'test'
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

daniel71 10. Okt 2007 23:04

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

Bernhard Geyer 11. Okt 2007 07:36

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.

daniel71 12. Okt 2007 23:34

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:
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;
Jedenfalls funktioniert es, leider auch nur ohne Umlaute.

Ich bin wirklich bald am verzweifeln.
Wieso kann ich zwar Umlaute aus der Tabelle anzeigen lassen, aber nicht danach suchen? :wall:
Delphi-Quellcode:
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;
Label2 zeigt korrekt die Kundennamen mit Umlauten.


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