Можно ли настроить TStringField для работы как TWideStringField в Delphi? - PullRequest
4 голосов
/ 23 марта 2010

Мы хотим использовать Unicode с Delphi 2009 и Interbase и обнаружили, что для переключения кодировки символов с WIN1252 на UNICODE_FSS или UTF8 мы сначала должны заменить все экземпляры TStringField на TWideStringField во всех модулях данных. Приблизительно для 60 модулей данных мы не можем просто сделать это за один уик-энд. Я вижу только два варианта стратегии перехода:

  • найти обходной путь, который позволяет использовать существующие поля TStringField, не вызывая ошибку «Ожидаемое: TWideStringField»

или

  • удалить все постоянные поля, чтобы избежать конфликта типов строк

Насколько я знаю, типы полей для постоянных полей базы данных регистрируются в каком-то реестре классов. Можем ли мы использовать это, чтобы заставить Delphi поверить, что TStringField подходит для символьного столбца Interbase с кодировкой UNICODE_FSS или UTF8?

Или мы можем использовать коммерческий драйвер dbExpress, который работает с TStringField в обоих случаях?

См. Также мой связанный вопрос: Delphi dbExpress и Interbase: шаги и риски миграции в UTF8?


Обновление: после замены всех вхождений TStringField на TWideStringField во всех файлах DFM и PAS мы обнаружили, что теперь также необходимо умножить значение свойства 'Size' в TWideStringFields на четыре (если мы используем UTF8) в каких-то 100 местах. Поэтому я начинаю вознаграждение за способ уменьшить ручную работу по исправлению DFM

Ответы [ 2 ]

2 голосов
/ 07 апреля 2010

Использование TStringField для символов Юникода доставит вам неприятности, в нем будет $ 00, в основном строка заканчивается, например, драйверами dbExpress, так как они принимают строки P (Ansi) Char. Использование TWideStringField использует PWideChar в dbExpress, поэтому драйвер ожидает истинные кодовые точки Unicode.

Боюсь, нелегкого выхода нет.

0 голосов
/ 22 мая 2010

Сергей А. Крюков, «Unicode Controls: что может делать VCL?», The Delphi Magazine, 116 (April 2005), p. 33-43 ( Исходный код ) Журнал Delphi

Unfortunately, the text of the original article is not freely available, but ask me if you have questions.
...