![]() |
Datenbank: Firebird • Version: 2.5 • Zugriff über: IBX / IBE
Select * from table where "Cannot transliterate character between character sets"
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 |
AW: Select * from table where "Cannot transliterate character between character sets"
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
Delphi-Quellcode:
packen.
OnFilterRecord
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; |
Alle Zeitangaben in WEZ +1. Es ist jetzt 10:16 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-2025 by Thomas Breitkreuz