2013-07-30 3 views
0

У меня есть приложение Delphi 7 с использованием базы данных Paradox через BDE, которую я преобразовал в Delphi XE3 и Firebird. В базе данных Paradox имеется строковое поле, содержащее зашифрованную строку, которая предположительно используется для лицензирования программного обеспечения. Проблема в том, что, хотя процедура, которая читала эту строку в старой программе (D7/Paradox), работала нормально, в новой программе (XE3/Firebird) процедура выдает ошибку. Причина, которую я обнаружил при отладке, заключается в том, что строка после чтения из базы данных отличается. Как я могу это исправить?Несоответствие строки Unicode Delphi

Строка в старой базе данных Paradox:

Ng-DrLrDOtfâtD89D1'D'îu

Строка в новой Firebird базе данных:

Ng-DrLrDOtfâtD89D1'D 'ugu

Как вы можете видеть выше строка e одинакова в обеих базах данных. .

В новой программе Delphi XE3, используя компоненты доступа к данным UniDAC при попытке получить значение поля с помощью FieldByName («FIELDNAME») свойство AsString, это то, что возвращается:

Ng- DrLrDOtfà ¢ tD89D1'D'îu

Вы можете видеть, что пара символов отличается. Это вызывает ошибку в подпрограмме, которая проверяет эту строку в программе. Испытывали ли вы это раньше? Каковы возможные причины этой проблемы и какие шаги я могу предпринять, чтобы решить эту проблему.

Примечание 1: Я преобразовал базу данных Paradox для Firebird с переходником, который я написал в Delphi (Для фактического кода для этого преобразователя, см: http://goo.gl/6xu2ST)

Примечание 2: Я базы данных, созданные с DEFAULT CHARACTER Узел UTF8 и компонент соединения UniDAC (TUniConnection) имеют значение SpecificOptions CharSet, установленное в 'UTF8'.

+0

какая версия Firebird вы используете? – Sam

ответ

2

Я решил эту проблему:

  1. В данном-модуле или коде, установите TUniConnection компонент SpecificOptions свойства UseUnicode в True.

  2. Закрыть проект и IDE Delphi. Откройте WinGrep и сделайте Find-Replace во всех файлах PAS и DFM проекта для строки: TStringField, изменив ее на TWideStringField.

  3. Скомпилировать.

И вуаля, ее рабочая идеальная! Ошибки, вызванные во время выполнения из-за неполного перевода/интерпретации символов Unicode из базы данных, исчезли.

Спасибо всем, кто ответил ранее.

Смежные вопросы