1

我有一个直接使用 dBase III 数据库的会计软件。我还得到了一个使用这些数据库用 Delphi XE2 编写的自制软件。Delphi 使用 Sybase Advantage 服务器 V11 与数据库进行通信。如果我在帐户软件中写一个“é”,当我使用 Advantage 服务器读取它时,我会读到一个“,”。

帐户软件公司似乎认为它是使用 IBM 代码页 850 编写的,但如果我在 Advantage 服务器中使用 ICLAND850,我将无法正常工作。

在 ADS 中尝试了许多不同的代码页后,我似乎无法找到正确的代码页。

我更改了优势服务器中的代码页,但我必须在其他地方更改它吗?

有没有办法或软件来检测 DBF 中的字符集?

4

1 回答 1

3

您必须AdsTableOptions.AdsCharType在您的TAdsQueryTAdsTable组件中设置:

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

动态排序规则仅支持 VFP 表,因此对于您正在处理的旧 DBF 文件,您必须将其设置为ANSIOEM

根据您使用的连接类型(ALS 或远程服务器),设置正确的 ANSI/OEM 代码页的方式会有所不同。

另请参阅我对这个问题的回答:Advantage Database Index Collat​​ion Sequence

可以使用TField.AsBytes. 我将从包含 ASCII 之外的字符的示例行和字段中读取原始字节,并在 OEM/ANSI 表中查找它们以找出正确的代码页。

网上有 OEM 和 ANSI 表。

例如é字符(即 Unicode $00E9$82在 OEM 850 中:

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

于 2013-10-16T13:38:51.177 回答