AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Datenbanken Select * from table where "Cannot transliterate character between character sets"
Thema durchsuchen
Ansicht
Themen-Optionen

Select * from table where "Cannot transliterate character between character sets"

Offene Frage von "sx2008"
Ein Thema von Meta777 · begonnen am 21. Feb 2013 · letzter Beitrag vom 22. Feb 2013
Antwort Antwort
Meta777

Registriert seit: 8. Sep 2004
Ort: Magdeburg
248 Beiträge
 
Delphi 10 Seattle Enterprise
 
#1

Select * from table where "Cannot transliterate character between character sets"

  Alt 21. Feb 2013, 22:23
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX / IBE
Ahoi allerseits,

ich habe eine UTF8 Firebird DB. Die nicht-unicode-fähigen Clients greifen über IBX mit WIN1250 (polnischer Zeichensatz) auf die DB zu. In der DB sind irgendwie Datensätze drin die beim Selektieren den im Titel erwähnten Fehler verursachen:
"Cannot transliterate character between character sets"

Der Grund ist klar aber gibt es eine Möglichkeit diese Datensätze zu selektieren oder noch besser gibt es eine Möglichkeit diese Daten ggf. auch mit Verlust zu korrigieren?

Vielen Dank schonmal

Shalom
  Mit Zitat antworten Zitat
Benutzerbild von sx2008
sx2008

Registriert seit: 16. Feb 2008
Ort: Baden-Württemberg
2.332 Beiträge
 
Delphi 2007 Professional
 
#2

AW: Select * from table where "Cannot transliterate character between character sets"

  Alt 22. Feb 2013, 12:29
Du müsstest dir eine "Charset-Cleaner" Anwendung schreiben.
Man fragt alle Datensätze einer Tabelle ab und für jedes Stringfeld wäre dann Folgendes zu tun:

Feldinhalt als WideString auslesen und in AnsiString (codepage 1250) wandeln.
Dann den Ansistring wieder zurück in einen Widestring wandeln.
Die beiden Widestrings miteinander vergleichen.

Ich würde diese Zeichensatzwandlungen und den Vergleich in das Event OnFilterRecord packen.
Damit würden dann alle Datensätze ausgefiltert, die kein Problem mit dem polnischen Zeichensatz haben.

Im ersten Schritt würde ich die Wandlung und den Vergleich in zwei Funktionen packen:
Delphi-Quellcode:
function ConvertToCP1250(s:string):string;
var
  tmp : AnsiString;
begin
  tmp := ...;
  Result := tmp;
end;

// prüfen, ob alle Zeichen in "s" mit Codepade 1250 kodiert werden können
function IsCP1250String(s:WideString):Boolean;
begin
  Result := (s = ConvertToCP1250(s));
end;
  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 02:57 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