У меня есть приложение Delphi 7, использующее базу данных Paradox через BDE, которую я преобразовал в Delphi XE3 и Firebird. В базе данных Paradox есть строковое поле, содержащее зашифрованную строку, которая предположительно используется для лицензирования программного обеспечения. Проблема в том, что подпрограмма, которая читала эту строку в старой программе (D7/Paradox), работала нормально, в новой программе (XE3/Firebird) подпрограмма выдает ошибку. Причина, которую я обнаружил при отладке, заключается в том, что строка после чтения из базы данных отличается. Как я могу это исправить?
Строка в старой базе Paradox:
Ng-DrLrDOtfâtD89D1'D'îu
Строка в новой базе данных Firebird:
Ng-DrLrDOtfâtD89D1'D'îu
Как вы можете видеть выше, строка одинакова в обеих базах данных.
В новой программе Delphi XE3, используя компоненты доступа к данным UniDAC, когда я пытаюсь получить значение поля с помощью FieldByName('fieldname').AsString , возвращается вот что:
Ng-DrLrDOtfâtD89D1'D'îu
Вы можете видеть, что пара символов отличается. Это вызывает ошибку в подпрограмме, которая проверяет эту строку в программе. Испытывали ли вы это раньше? Каковы возможные причины этой проблемы и какие шаги я могу предпринять для ее решения.
Примечание 1. Я преобразовал базу данных Paradox в Firebird с помощью конвертера, написанного в Delphi (фактический код для этого конвертера см.: http://goo.gl/6xu2ST)
Примечание 2. У меня есть база данных, созданная с НАБОРОМ СИМВОЛОВ ПО УМОЛЧАНИЮ UTF8, а компонент соединения UniDAC (TUniConnection) имеет набор символов SpecificOptions, установленный на «UTF8».