我有一个使用Paradox数据库通过BDE的Delphi 7应用程序,我已经转换为Delphi XE3和Firebird。 Paradox数据库中有一个字符串字段,其中包含一个加密字符串,该字符串据称用于许可软件。问题是虽然在旧程序(D7 / Paradox)中读取此字符串的例程工作正常,但在新程序(XE3 / Firebird)中,例程正在抛出错误。我通过调试找到的原因是从数据库读取后的字符串是不同的。我该如何解决这个问题?
旧Paradox数据库中的字符串:
伍-DrLrDOtfâtD89D1'D'îu
新Firebird数据库中的字符串:
伍-DrLrDOtfâtD89D1'D'îu
如上所示,两个数据库中的字符串相同。
在新的Delphi XE3程序中,当我尝试使用FieldByName('fieldname')获取字段的值时使用UniDAC数据访问组件.AsString,这是返回的内容:
伍-DrLrDOtfâtD89D1'D'îu
你可以看到几个字符是不同的。这导致在程序中检查此字符串的例程中出错。你以前经历过这个吗?导致此问题的可能原因是什么?我可以采取哪些步骤来解决此问题。
注1:我使用Delphi编写的转换器将Paradox数据库转换为Firebird(有关此转换器的实际代码,请参阅:http://goo.gl/6xu2ST)
注2:我使用DEFAULT CHARACTER SET UTF8创建数据库,UniDAC连接组件(TUniConnection)将SpecificOptions CharSet设置为'UTF8'。
答案 0 :(得分:2)
我通过以下方式解决了问题:
在数据模块或代码中,将TUniConnection组件属性SpecificOptions UseUnicode设置为True。
关闭项目和Delphi IDE。打开WinGrep并在所有项目PAS和DFM文件中为字符串执行Find-Replace:TStringField,将其更改为TWideStringField。
重新编译。
瞧,它的工作完美!由于数据库中Unicode字符的翻译/解释不完整而导致运行时出错。
感谢所有早些回复的人。