У меня есть приложение 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'.
какая версия Firebird вы используете? – Sam