环境:win2000server+sp4,oracle9.2.0.1,delphi7.0,ado,mdac27
问题1:在服务器(hp机器),ado使用OraOLEDB.Oracle访问数据库,取出varchar2的数据字段全部为TWideStringField,但在别的机器(oracle客户端一个版本)上取出的却是tstringField,开发时测试未遇到该问题。问:为何取出TWideStringField类型,改如何配置使其取出tstringField来。
问题2:ado使用MSDAORA访问数据库时,不支持lob类型,只能使用long,当oracle每个表只能使用一个long字段,我有两个,OraOLEDB.Oracle支持lob类型。问:如何让MSDAORA支持lob类型。
以上两个问题,各500分,如有人解决,我可再开贴发分

解决方案 »

  1.   

    问题1:如果你确定Oracle客户端版本一致,那还需要检查ADO版本是否一致、delphi版本是否一致。问题2:在连接串中增加"LOB=T;"
    "Provider=MSDAORA.1; Password=...; User ID=...; LOB=T;...;"
      

  2.   

    to : libin_ftsafe(子陌红尘) ,都一致,只是不明白为什么会是widesrting
    咋加"LOB=T;"我加了还是不行
      

  3.   

    to w3k(网络3K) 
    我试了LOB=True/LOB=TRUE/LOB=1/LOB=T/都不行,能给我发个完整的串吗?(能用的)
    另:我不知道你说的楼猪是谁?不管你水平有多高,希望你以后不要骂人!!
      

  4.   

    这是我试过的串
    Provider=MSDAORA.1;Password=pt_gg;User ID=pt_gg;Data Source=orcl;Extended Properties="LOB=TRUE"Provider=MSDAORA.1;Password=pt_gg;User ID=pt_gg;Data Source=orcl;LOB=TRUE
      

  5.   

    我对于第一个问题说说我的理解,当然我不是Oracle高手
    我目前在学COM,对ADO比较熟悉,ADO也是一种COM组件,对于COM组件接口都需要宽字符,我看你的
    是TWideStringField,又使用ADO,想必是跟宽字符有关系
    我使用ADO处理过字符串,在ADO内部都是宽字符,传递到客户端都处理为ANSI单字符
    如果对你有没有什么提示,请不要见怪
      

  6.   

    TWideStringField是ucode字符,tstringField是ANSI字符,ucode字符在过滤时或很多其他操作时不太方便,但是我在开发时用的oracle8的客户端,取出就是tstrings,不知9是咋了
      

  7.   

    你的LOB是什么?在DELPHI端怎么显示?
      

  8.   

    如果是CLOB可以考虑oracle的存储过程,然后用delphi的ADOStoredproc调用
      

  9.   

    我的lob是照片,ado不支持的话我根本就得不到这个lob,当然也没法显示了
      

  10.   

    加上
    在recordset手面加上
    .value