一个很简单的程序:ADO连接ORACLE(9i,10g,11g),执行一些sql语句,对数据表进行数据的添删改。
问题出现了
服务器:oracle9i/winxp ,客户端 9i(11g也用过)/win7
连接驱动ORAOLDEB,ADO
连接没有问题,但是执行SQL语句时出现错误[ORA-00905: 缺少关键字]错误,调试发现是个简单的select ... from 语句,其中由于该表有CLOB字段,因此sql语句做过预先处理,将该字段强制转为vharchar(200)。
这个语句在pl/sql和sql plus执行均没有问题。但是在程序中就不行,只要执行到ADODataSet.Open;就会报错。
但是很奇怪的事情是: 
   在别的计算机上运行这个程序,就没有这个问题;假如这个结论完全正确的话,可以认为客户端计算机环境有问题。
但是随后,我在这个客户端机器上写了个简单的例子,TADODataSet从创建到open,和我程序中的完全一致,运行居然没有问题。
简直太费解了。到底是客户端的问题还是具有普遍性?                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                                               
               

解决方案 »

  1.   

    简单的例子和原来的程序是否有所区别?比如也在SQL语句中将CLOB转成varchar
    当然不能完全排除数据库驱动原因
      

  2.   

    这几天忙,这事放在一边,没有及时上来,非常抱歉。我把语句贴出来,大家帮忙看看,难道真的是驱动问题吗?我是用ADOConnect做的连接,provider 用的是MS的select FIdentityName,FPhysicalName,FType,FUserVisible,FShape,FIsCode,FKeyFlds,FDataVersion,  FStruVersion,FSysVersion,FPkgName, cast(FUniqueFields as Varchar2(500)) FUniqueFields, cast(FDisplayFields as Varchar2(200)) FDisplayFields, cast(FMatchFields as Varchar2(200)) FMatchFields,  FBeginID,FEndID,FNeedDelete,FSyncType,FShortCodeFormat  FROM tblTableDict ORDER BY FIdentityName
      

  3.   

        ADOConnection1.ConnectionString := ' "Provider=OraOLEDB.Oracle.1;Password=密码;Persist Security Info=True;User ID=用户名;Data Source=(DESCRIPTION = (ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)(HOST = 10.224.141.197)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = 服务器名称)))"';