【发布时间】:2014-11-27 22:47:25
【问题描述】:
Delphi XE3,Win7 教授
我需要写入 DBASE 3(旧格式)文件以导出类似 DOS 的应用程序(Clipper?)的数据。 好的,我想:MS DBASE 驱动程序可以做到这一点。
但我对匈牙利口音有疑问。
我试过这个连接字符串:
Driver={Microsoft dBASE Driver (*.dbf)};DriverID=21;Dbq=c:\temp;Extended Properties=dBASE III;charSet=CP 852;Locale Identifier=1038;Character Set=CP 852;CODEPAGE=852
正如我所见,它不能只写入 ANSI 文件(DOS 应用程序接受 CP852 字符)。
我尝试使用 AnsiToOEM 转换内容,但某些字符在保存时丢失。在记录中我看到了很好的内容,但保存的文件包含错误的重音。 测试文本是“árvíztűrő tükörfúrógép”。 结果中缺少“í”、“ó”、“Ó”。
我发现了一些奇怪的东西!
如果主窗体有一个打开的 ADOConnection(DFM 中的 connected 属性为 true),那么我将从 DBASE 文件中读取好的字符,然后我可以将它们写入文件 - ANSI 字符将被正确转换。 “í”可以,“ó”可以。 此 ADOConnection 对象可能与阅读器不同。
如果我在IDE模式下关闭这个ADOConnection,打开的文件不会被转换,所以我会看到一些奇怪的重音字符,我不会在文件中写入好的文本。
很奇怪,因为如果我在FormCreate上通过代码打开这个连接,就会出现问题... 如果资源流传输器从 DFM 读取 ADOConnection 的活动(真值)“已连接”属性,我可以读取和写入 ADOQuery 记录!
我不知道后台发生了什么,以及如何强制这个 ADO 字符转换例程工作,但是我浪费了更多的时间来寻找一个可以工作的 DBASE III 导出器,我只发现了一个类似 bug 的东西......
有人知道这是什么吗?为什么只有当我在 DFM 中连接了 ADOConnection 时 ADO 字符编码器/解码器才能工作? 或者我如何使用 ADODB.Connection 而不是 ADOConnection 对象来避免这种副作用?
感谢您的每一个想法!
【问题讨论】:
标签: delphi character-encoding odbc ado dbase