AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Delphi Unicode Zeichen in Query-Komponente
Thema durchsuchen
Ansicht
Themen-Optionen

Unicode Zeichen in Query-Komponente

Ein Thema von hsdkit · begonnen am 23. Mär 2004 · letzter Beitrag vom 3. Sep 2005
Antwort Antwort
hsdkit

Registriert seit: 23. Mär 2004
2 Beiträge
 
#1

Unicode Zeichen in Query-Komponente

  Alt 23. Mär 2004, 13:13
Hallo,
ich habe ein Problem. Ich möchte Unicode-Zeichen, in diesem Fall persiche Zeichen (Farsi) an einen Query übergeben und nach diesen Eintrag in einem MSSQL-NVARCHAR Feld suchen.

1. Ich setze ADO ein
2. Ich setze tnt-Controls zur DB-Anzeige ein, diese sind Unicode-fähig
3. Ich setzt MS-SQL 2000 ein

Kann mir jemand einen guten Tip geben??

Vielen Dank im voraus für sinnvolle Beiträge.
Hermann
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#2

Re: Unicode Zeichen in Query-Komponente

  Alt 24. Mär 2004, 20:47
Entweder du setzt deine Abfragewerte als Parmeter oder Du probierst mal ein N vorzusetzen:

select * from mytable where myColumn = N'UnicodeWert';
  Mit Zitat antworten Zitat
hsdkit

Registriert seit: 23. Mär 2004
2 Beiträge
 
#3

Re: Unicode Zeichen in Query-Komponente

  Alt 25. Mär 2004, 09:24
Danke für den Tip, funktioniert allerdings nicht.

Ist schon seltsam mit den arabisch/persichen Zeichensätzen.

Nochmals Dank
Hermann
  Mit Zitat antworten Zitat
Benutzerbild von Bernhard Geyer
Bernhard Geyer

Registriert seit: 13. Aug 2002
17.170 Beiträge
 
Delphi 10.4 Sydney
 
#4

Re: Unicode Zeichen in Query-Komponente

  Alt 25. Mär 2004, 17:37
Natürlich muss der komplette Weg bis zum Absender der Query mit Widestrings arbeiten. Sobald einmal eine Wandlung nach (Ansi-)String erfolgte ist dein String kaputt (Statt Unicode kommen Fragezeichen). Check deine Query mal mit dem SQL-Tracer von M$ ob wirklich der String mit den persischen Zeichen überhaupt bis zur DB ankommt.

Auch würde ich dir meinen Artikel in der Ausgab 5.2003 von der Zeitschrit der Entwickler empfehlen (We are one World). Dort wird auf einige Aspekte der Unicodeentwicklung mit Delphi eingegangen.
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#5

Re: Unicode Zeichen in Query-Komponente

  Alt 3. Sep 2005, 13:20
...hab das selbe Problem...

folgendes konnte ich mittels Profiler auslesen:

exec sp_executesql N'select * from ttest where test_unicode = @P1
', N'@P1 char(50)', '''?''

@P1 sollte eigentlich ein chinesisches Zeichen sein...

es scheint als kommt das Zeichen nicht korrekt bei der DB an.
Aber woran könnte dies liegen?
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#6

Re: Unicode Zeichen in Query-Komponente

  Alt 3. Sep 2005, 17:59
Es gibt einige Fehler im ADO-Wrapper (D6) von Borland hinsichtlich den Unicode-Strings. Googel mal nach patches. Einen habe ich im Web gefunden (der dürfte für Dich reichen), den Anderen nicht: Da musste ich mir selbst helfen. NVarchars werden fälschlicherweise innerhalb Delphi als NChars interpretiert, was dazu führt, das alle NVarchar(X)-Spalten -durch Delphi gefüllt- genau X Zeichen (mit Blank aufgefüllt) haben: Ärgerlich. Gleiches gilt für Parameter.

Hast Du eine Delphi Version mit Quellcodes? Dann kann ich Dir den Patch geben.
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
skyware

Registriert seit: 11. Dez 2002
Ort: Wetzikon, Zürich
151 Beiträge
 
Delphi 6 Enterprise
 
#7

Re: Unicode Zeichen in Query-Komponente

  Alt 3. Sep 2005, 18:12
Hallo,

ja habe den Source Code..Delphi 6 Enterprise.
Wäre super wenn Du mir den Patch senden könntest,
war jetzt schon den ganzen Nachmittag dran dieses
Problem zu lösen..leider bisher noch ohne Erfolg.

Bin also gespannt obs mit dem Patch läuft...
  Mit Zitat antworten Zitat
alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#8

Re: Unicode Zeichen in Query-Komponente

  Alt 3. Sep 2005, 18:47
Schau Dir in ADOdb.pas die beiden Funktionen 'ADOTypeToFieldType' und 'FieldTypeToADOType' an. In Letzerem war der Fehler, glaub ich, drin. Aber das ist auf den ersten Blick zu sehen: Check die Case of und die Abbildung von ftWideChar zu adWChar. Ich habs natürlich schon korrigiert, aber ich meine, der Bug war in FieldTypeToADOType, da stand nämlich
Delphi-Quellcode:
...
  Case FieldType Of
...
    ftString, ftWideChar : Result := adVarChar;
...
und richtig muss es ja heissen:
Delphi-Quellcode:
...
  Case FieldType Of
...
    ftString : Result := adVarChar;
    ftWideChar : Result := adVarWChar;
...
Falls Du Stored Procedures mit NVarChar Parametern hast, bekommst Du den von mir schon beschriebenen Bug: Übergabe z.B. von 'Foo' an einen NVarChar(10) Parameter landet in SQL als N'Foo ' (also mit Leerzeichen auf 10 Zeichen aufgefüllt). Dieser Bug ist wohl in ADO selbst. Da hilft dann nur ein Workaround.

Melde Dich, falls DAS bei Dir auftritt. Dann musst Du im OnWillExecute-Ereignis der TADOConnection den ADO-Typen des Items per Hand setzen:
Ich habe eine Stringlist von Parameternamen, die ich umbiegen muss, und dann geht's so:
Delphi-Quellcode:
Var
  i : Integer;

Begin
  with Command.Parameters do
    For i:=0 to Count - 1 do
      If fWideCharParams.IndexOf(AnsiUpperCase (Item [i].Name))<>-1 Then
        Item [i].Type_ := adVarWChar;
end;
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:07 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