我有一个通过 BDE 使用 Paradox 数据库的 Delphi 7 应用程序,我已将其转换为 Delphi XE3 和 Firebird。Paradox 数据库中有一个字符串字段,其中包含一个加密字符串,据称该字符串用于软件许可。问题是,虽然在旧程序 (D7/Paradox) 中读取此字符串的例程运行良好,但在新程序 (XE3/Firebird) 中,该例程会引发错误。我通过调试发现的原因是从数据库中读取的字符串不同。我怎样才能解决这个问题?
旧 Paradox 数据库中的字符串:
Ng-DrLrDOtfâtD89D1'D'îu
新 Firebird 数据库中的字符串:
Ng-DrLrDOtfâtD89D1'D'îu
正如您在上面看到的,两个数据库中的字符串是相同的。
在新的 Delphi XE3 程序中,当我尝试使用 FieldByName('fieldname').AsString 获取字段的值时,使用 UniDAC 数据访问组件,这是返回的内容:
Ng-DrLrDOtfâtD89D1'D'îu
你可以看到有几个字符是不同的。这导致在程序中检查此字符串的例程中出现错误。你以前有过这种经历吗?这个问题的可能原因是什么,我可以采取哪些步骤来解决这个问题。
注 1:我使用我在 Delphi 中编写的转换器将 Paradox 数据库转换为 Firebird(有关此转换器的实际代码,请参阅:http: //goo.gl/6xu2ST)
注意 2:我使用 DEFAULT CHARACTER SET UTF8 创建了数据库,并且 UniDAC 连接组件 (TUniConnection) 已将 SpecificOptions CharSet 设置为“UTF8”。