2013-10-15 44 views
1

我得到了一個直接使用dBase III數據庫的會計軟件。我還用Delphi XE2編寫了一個使用這些數據庫的自制軟件。 Delphi使用Sybase Advantage服務器V11與數據庫進行通信。如果我在賬戶軟件中寫入「é」,當我用Advantage服務器讀取它時,我讀了一個「,」。在ADS中找不到正確的代碼頁與dbase III進行通信

該帳戶軟件公司似乎認爲它是用IBM codepage 850編寫的,但如果我在Advantage服務器中使用ICLAND850,則不起作用。

在ADS中嘗試了許多不同的代碼頁後,我似乎無法找到合適的代碼頁。

我更改了優勢服務器中的代碼頁,但我是否必須在其他地方更改它?

有沒有一種方法或軟件來檢測DBF中的字符集?

回答

3

你必須設置你的TAdsQueryTAdsTable組件AdsTableOptions.AdsCharType

http://devzone.advantagedatabase.com/dz/webhelp/Advantage11/ade_adschartype.htm

動態排序規則僅適用於VFP-表支持,讓你在處理你的舊DBF文件,必須設定這可以是ANSIOEM

根據您正在使用的連接類型(ALS或遠程服務器),設置正確的ANSI/OEM代碼頁的方式不同。

另見我回答這個問題:Advantage Database Index Collation Sequence

很可能得到使用 TField.AsBytes數據所使用的原始字節。 我會從示例行和字段中讀取包含ASCII外部字符的原始字節,並在OEM/ANSI表中查找它們以找出正確的代碼頁。

網上有OEM和ANSI表格。

例如,é字符(它是Unicode $00E9)是OEM 850 $82

http://demo.icu-project.org/icu-bin/convexp?conv=ibm-850_P100-1995&s=ALL

+1

感謝您的答案。現在,當我嘗試Query.Fields(1).asbyte,我得到(0,0,0,0,0,0,0,0,0),但如果我做Query.Fields(1).asString我得到'C......')。任何想法? – Carl

+0

@Carl你說得對,'AsBytes'不適合這個,我只是自己試了一下。您可以隨時用十六進制編輯器打開.dbf文件,這樣就可以確切知道char的存儲方式。 –

+0

也許這個問題也可以幫助:http://stackoverflow.com/questions/6756124/detect-the-encoding-from-a-dbf –

相關問題