【发布时间】:2010-05-04 05:18:17
【问题描述】:
我们正在通过 HIT OLEDB 和 HIT ODBC 连接到一个多成员 AS400 iSeries 表。
您通过别名连接到此表以访问特定的多成员。我们以这种方式在 AS400 上创建别名:
CREATE ALIAS aliasname FOR table(membername)
然后我们可以这样查询表的每个成员:
SELECT * FROM aliasname
我们首先在 Delphi6 中对此进行测试,但稍后会将其移至 D2010
我们正在为 AS400 使用 HIT OLEDB。
我们正在从表中提取记录,并且该字段被视为 tBytesField。我也尝试过 ODBC 驱动程序,它也被视为 tBytesField。
直接在 AS400 上,我可以查询数据并查看可读文本。我可以使用 iSeries 导航工具并查看可读文本。
但是,当我通过 HIT OLEDB 或 HIT ODBC 将它带到 Delphi 客户端并尝试通过 asString 查看时,我只看到不可读的文本.. 像这样:
ñðð@ðõñðõñòøóóöøñðÁÕÒ@ÖÆ@ÁÔÅÙÉÃÁ@@@@@@@@ÂÈÙÉâãæÁðòñè@ÔK@k@ÉÕÃK@@@@@@@@@ç
我把上面的文字弄乱了,但这是显示的字符类型。
当我在 D2010 中进行测试时,文本看起来像日语或中文字符,但如果我显示为 AnsiString,那么它看起来就像它在 Delphi 6 中所做的那样。
我认为这可能与代码页或字符集有关,但我没有这方面的经验,所以如果它是相关的,这对我来说是新的。当我查看 AS400 上的编码字符集时,它设置为 65535。
我需要怎样做才能使该文本可读?
我们确实有一个第三方组件 (Delphi400),它可以让事情以更原生的 AS400 方式运行。当我使用它的 AS400 连接和 AS400 查询组件时,它将该字段显示为 tStringField 并显示得很好。但是我们正在逐步淘汰该产品(出于多种原因),并且非常希望带有 ADO 组件的 OLEDB 能够正常工作。
为了澄清,带有 tADOQuery 的 HIT OLEDB 确实有一些字段显示为我们使用的许多其他表的 tStringFields……不知道为什么在这种情况下它显示为 tBytesField。我不是 AS400 专家,但查看 AS400 上的字段定义,显示为 tBytesField 的字段定义看起来与显示为 tStringFields 的字段定义相同......但肯定有区别。也许是因为是多成员?
那么...有人对如何获取正确的可读字符串数据有任何指导吗?
如果您需要更多信息,请询问。
格雷格
【问题讨论】:
-
您确定您没有看到 [EBCDIC][1] 编码文本吗? [1]:en.wikipedia.org/wiki/EBCDIC
-
(男孩,我希望评论字段支持更多降价)
-
它可能是 EBCDIC,但现在我已经在客户端下载了数据......如何在 Delphi 2010 中将其从 EBCDIC 转换为 ANSI(基于 unicode 的系统)
标签: delphi db2 ibm-midrange