2013-07-30 79 views
0

我有一個Delphi 7應用程序使用Paradox數據庫通過BDE,我已經轉換爲Delphi XE3和Firebird。 Paradox數據庫中有一個字符串字段,其中包含一個被認爲用於許可軟件的加密字符串。問題是,雖然在舊程序(D7/Paradox)中讀取該字符串的例程工作正常,但在新程序(XE3/Firebird)中,該例程發生錯誤。我通過調試發現的原因是從數據庫讀取後的字符串不同。我怎樣才能解決這個問題?Delphi Unicode字符串不匹配

舊Paradox數據庫字符串:

吳-DrLrDOtfâtD89D1'D'îu

新Firebird數據庫的字符串:

吳-DrLrDOtfâtD89D1'D '012

正如你在上面看到的e字符串在兩個數據庫中都是相同的。 。

在新的Delphi XE3程序,用UniDAC數據訪問組件時,我嘗試使用FieldByName(「字段名」)AsString得到字段的值,這是返回什麼:

NG- DrLrDOtf™D89D1'D'îu

您可以看到幾個字符是不同的。這在程序中檢查此字符串的例程中導致錯誤。你以前遇到過嗎?這個問題的可能原因是什麼?我可以採取哪些措施來解決這個問題。

注1:我轉換的悖論數據庫火鳥與我在Delphi寫一個轉換器(有關該轉換器的實際代碼,請參見:http://goo.gl/6xu2ST

注2:我已在數據庫DEFAULT CHARACTER創建SET UTF8和UniDAC連接組件(TUniConnection)已將SpecificOptions CharSet設置爲'UTF8'。

+0

您使用的是Firebird的哪個版本? – Sam

回答

2

我所解決的問題:

  1. 在數據模塊或代碼,所述TUniConnection組件屬性SpecificOptions了useUnicode設置爲True。

  2. 關閉項目和Delphi IDE。打開WinGrep並在字符串的所有項目PAS和DFM文件中執行Find-Replace:TStringField,將其更改爲TWideStringField。

  3. 重新編譯。

而瞧,其工作完美!由於數據庫中Unicode字符的不完整翻譯/解釋導致的運行時錯誤已消失。

謝謝大家早些時候回覆。