Можно ли настроить Tstringfield, чтобы работать как Twidestringfield в Delphi?

StackOverflow https://stackoverflow.com/questions/2500517

Вопрос

Мы хотим использовать Unicode с Delphi 2009 и Interbase и обнаружили, что для переключения кодирования символов с Win1252 на Unicode_fss или UTF8 мы сначала должны заменить все экземпляры Tstringfield на Twidestringfield во всех данных DataModules. Примерно для 60 данных мы не можем просто сделать это за один выходной. Я вижу только два варианта для стратегии миграции:

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

или же

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

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

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

Смотрите также мой связанный вопрос: Delphi dbexpress и Interbase: UTF8 Шаги миграции и риски?


Обновление: после замены всех событий TStringfield на Twidestringfield во всех файлах DFM и PAS мы обнаружили, что теперь также необходимо увеличить значение свойства «размер» TwidestringFields на четыре (если мы используем UTF8) в примерно 100 местах. Поэтому я начинаю щедрость, чтобы уменьшить ручную работу, чтобы исправить DFMS

Это было полезно?

Решение

Использование Tstringfield для символов Unicode доставит вам неприятности, в нем будут 00 долларов, в основном заканчивая строку, например, драйверы dbexpress, так как они принимают strings p (ansi). Использование Twidestringfield использует PwideChar в DBEXPRESS, поэтому драйвер ожидает истинного кодепунтов Unicode.

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

Другие советы

Sergey A Kryukov, «Управление Unicode: что может сделать VCL?», The Delphi Magazine, 116 (апрель 2005 г.), с. 33-43 (Исходный код) Журнал Delphi

Unfortunately, the text of the original article is not freely available, but ask me if you have questions.
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top