2010-04-28 50 views
0

我们通过HIT OLEDB和HIT ODBC连接到多成员AS400 iSeries表。Delphi TBytesField - 如何正确查看文本 - 源代码是HIT OLEDB AS400

您通过别名连接到此表以访问特定的多成员。我们在AS400创建别名是这样的:

CREATE ALIAS aliasname FOR table(membername) 

然后,我们可以查询该表中的每个成员这样说:

SELECT * FROM aliasname 

我们在Delphi6的第一个测试这一点,但将其移动到D2010稍后

我们使用HIT OLEDB作为AS400。

我们从表中拉下记录,该字段被视为tBytesField。我也尝试了ODBC驱动程序,它也被看作tBytesField。

直接在AS400上,我可以查询数据并查看可读文本。我可以使用“iSeries导航”工具并查看可读的文本。

然而,当我通过HIT OLEDB把它归结为德尔福的客户端或HIT ODBC,并尝试通过asString查看然后我就看到不可读的文本..这样的事情:

NDD @ðõñððððñ÷@ õôððõñòøóóöøñðÂÁÕÒ@ OAE @ÁÔÅÙÉÃÁ@@@@@@@@ÂÈÙÉâãæÁðòñè@ OK @沃顿ÉÕÃ[email protected]@@@@@@@@ç

我错杂上面的文字,但是字符类型出现。

当我做了一个测试在D2010的文字看起来像japanse或中国文字,但如果我显示为AnsiString类型那么它看起来像它做什么在Delphi 6

我想这可能有事情要做与代码页或字符集,但我没有这方面的经验,所以它是新的,如果它是相关的。当我查看AS400上的编码字符集时,它设置为65535.

我需要做些什么才能使此文本可读?

我们确实有一个第三方组件(Delphi400),它使得事物以更原生的AS400方式运行。当我使用它的AS400连接和AS400查询组件时,它将该字段显示为tStringField并显示得很好。但是我们正在逐步淘汰这款产品(出于多种原因),并且真的很喜欢带有ADO组件的OLEDB。

只是澄清用tADOQuery的HIT OLEDB确实有一些字段显示为我们使用的许多其他表格的tStringFields ...不知道为什么它在这种情况下显示为tBytesField。我不是AS400的专家,但是看看AS400上的字段definititions,那些显示为tBytesField的字段看起来与显示为tStringFields字段的字段相同...但是必须有所不同。也许是因为是多人成员?

那么......没有人有任何指导如何获得正确的字符串数据是可读的吗?

如果您需要更多信息,请询问。

格雷格

+1

你确定你没有看到[EBCDIC] [1]编码文本? [1]:http://en.wikipedia.org/wiki/EBCDIC – 2010-04-29 06:28:06

+0

(男孩我希望评论栏可以支持更多减价) – 2010-04-29 06:30:20

+0

它可能是EBCDIC,但现在我已经把数据放在了客户端。 ..如何在Delphi 2010中将此从EBCDIC转换为ANSI(基于unicode的系统) – gsaunders 2010-04-30 15:53:34

回答

0

我在HIT ODBC 400和HIT OLEDB 400上找到了答案,它有一个名为“Convert CCSID 65535 = True”的属性,或者在OLEDB UDL中它看起来像“Binary Characters = True”。

不知道我是如何错过了这些,但那是诀窍!

感谢您的反馈意见。

0

一个问题是,您的客户端不知道它应该将数据从EBCDIC转换为ASCII,因为在服务器上的表中的CCSID设置不正确。

65535的CCSID应该表示该字段包含二进制数据。您的客户不知道该列包含EBCDIC编码的字符串,因此不会尝试将其转换。

在我的服务器上,我们所有的字符字段的CCSID都是37,这是EBCDIC。

+0

因此,在不更改AS400上的CCSID的情况下...客户端上是否有任何可以正确解码的CCSID? – gsaunders 2010-04-30 13:06:27