首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >德尔菲: ADOConnection,DBASE3和字符集(bug?)

德尔菲: ADOConnection,DBASE3和字符集(bug?)
EN

Stack Overflow用户
提问于 2014-10-02 20:49:05
回答 1查看 1.3K关注 0票数 3

德尔斐XE3,Win7教授

我需要写入DBASE 3(旧格式)文件来导出类似DOS的应用程序(快船队?)的数据。好吧,我想: DBASE女士司机可以做到这一点。

但我对匈牙利口音有意见。

我尝试了这个连接字符串:

代码语言:javascript
复制
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ógép“。结果中漏掉了“i”、"ó“、”a“。

我发现了一些奇怪的东西!

如果主表单有一个打开的ADOConnection (连接的属性在DFM中是真的),那么我将从DBASE文件中读取良好的字符,并且我可以将它们写入文件中-- ANSI字符将被正确转换。“i”可以,"ó“可以。这个ADOConnection对象可能与读取器不同。

如果我在IDE模式下关闭这个ADOConnection,打开的文件将不会被转换,所以我会看到一些奇怪的重音字符,并且我不会将好的文本写入文件中。

这很奇怪,因为如果我通过代码在FormCreate上打开这个连接,问题就会出现.如果资源流从DFM读取ADOConnection的active (真值) "connected“属性,我可以读写ADOQuery记录!

我不知道背景发生了什么,也不知道如何迫使ADO字符转换程序工作,但我浪费了更多的时间找到一个工作的DBASE III出口商,我只发现了一个类似于but的东西.

有人知道这是什么吗?为什么只有当我在DFM中有一个连接的ADOConnection时,ADO字符编解码器才能工作?或者如何使用ADODB.Connection而不是ADOConnection对象来避免这种副作用?

谢谢你的每一个想法!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-10-17 19:35:35

正如我所看到的,我需要设置代码页来修复ADO的字符串。

代码语言:javascript
复制
var
  s: string;
  aStr1, aStr2: AnsiString;

begin
...

s := 'árvíztûrõ tükörfúrógép';
aStr1 := s;
SetLength(aStr2, Length(aStr1));
AnsiToOemBuff(PAnsiChar(aStr1), PAnsiChar(aStr2), Length(aStr1));
SetCodePage(RawbyteString(aStr2), 852, False); // THIS IS THE SOLUTION
ADOQuery1.FieldBYName('name').AsAnsiString := aStr2;

否则,我的AnsiString将再次在后台转换。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26169419

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档