我们通过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查看时,我只看到不可读的文本..这样的事情:
NDD @ðõñððððñ÷@õôððõñòøóóöøñðÂÁÕÒ@ OAE @ÁÔÅÙÉÃÁ@@@@@@@@ÂÈÙÉâãæÁðòñè@ OK @沃顿ÉÕÃK@@@@@@@@@ç
我混淆了上面的文字,但那是出现的字符类型。
当我在D2010中进行测试时,文本看起来像日本或中文字符,但如果我显示为AnsiString,那么它看起来就像在Delphi 6中做的那样。
我认为这可能与代码页或字符集有关,但我没有这方面的经验,所以如果它是相关的,它对我来说是新的。当我查看AS400上的编码字符集时,它被设置为65535。
我需要做些什么才能使这个文字可读?
我们确实有第三方组件(Delphi400),它使事物以更原生的AS400方式运行。当我使用其AS400连接和AS400查询组件时,它将该字段显示为tStringField并显示正常。但是我们正逐步淘汰这款产品(出于多种原因),并且非常希望带有ADO组件的OLEDB能够正常工作。
为了澄清,使用tADOQuery的HIT OLEDB确实有一些字段显示为我们使用的许多其他表的tStringFields ...不确定为什么它在这种情况下显示为tBytesField。我不是AS400的专家,但是看看AS400上的字段定义,那些显示为tBytesField的内容看起来与那些显示为tStringFields的内容相同......但必须有区别。也许是因为成为多人?
那么......有没有人对如何获取可读的正确字符串数据有任何指导?
如果您需要更多信息,请询问。
格雷格
答案 0 :(得分:0)
一个问题是您的客户端不知道它应该将数据从EBCDIC转换为ASCII,因为服务器表上的CCSID设置不正确。
CCSID为65535应该表示该字段包含二进制数据。您的客户端不知道该列包含EBCDIC编码的字符串,因此不会尝试转换它。
在我的服务器上,我们所有的字符字段的CCSID都是37,这是EBCDIC。
答案 1 :(得分:0)
我找到答案......在HIT ODBC 400和HIT OLEDB 400上都有一个名为“Convert CCSID 65535 = True”的属性,或者在OLEDB UDL中它看起来像“Binary Characters = True”。
不知道我是怎么错过那些的,但是这就行了!
感谢您的反馈。