2013-10-15 26 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 –

相关问题