最近ORACLE数据库开发中碰到以下问题,在三层系统的中间层中执行数据库操作时
在用DataSetProvider的DataRequest用ADOQUERY提交sql语句时,如下语句
    ADOQuery1.Close ;
    ADOQuery1.SQL.Clear;
    ADOQuery1.SQL.Add(Input);
    if ADOQuery1.Parameters.Count>0 then begin
        for i:=0 to ADOQuery1.Parameters.Count-1 do begin
            if UpperCase(ADOQuery1.Parameters.Items[i].Name)='CUR1' then begin
                ADOQuery1.Parameters.Items[i].DataType:=ftCursor ;  //ftVariant
                ADOQuery1.Parameters.Items[i].Direction:= pdOutput ;
            end;
        end;
    end;
    TDataSetProvider(Sender).DataSet.Open;
    Result := TDataSetProvider(Sender).Data;
在执行到上面的创建参数的地方,就报错“参数类型不正确,或不在可以接受的范围之内,或与其他参数冲突。”是什么提示?这段语句在SQL版本的中间层中是可以正确执行的?如将上面的处理改为用QUERY执行如下:
    Query1.Close ;
    Query1.SQL.Clear;
    Query1.SQL.Add(Input);
    if Query1.Parameters.Count>0 then begin
        for i:=0 to Query1.Parameters.Count-1 do begin
            if UpperCase(Query1.Parameters.Items[i].Name)='CUR1' then begin
                Query1.Parameters.Items[i].DataType:=ftCursor ;  //ftVariant
                Query1.Parameters.Items[i].Direction:= ptOutput ;//ado中为pdOutput ;            end;
        end;
    end;
    TDataSetProvider(Sender).DataSet.Open;
    Result := TDataSetProvider(Sender).Data;可以正确执行,但是在提交的SQL串长度大于220K(初步测试)就报错?是不是和BDE连ORACLE数据库一次发送SQL串的长度有关系,不能一次提交过长的sql串?
感谢各位的不吝赐教,顶着有分!

解决方案 »

  1.   

    关于oracle+bde访问长字串(BOLB字段)的问题,我以前回过多个,的确oracle+bde访问blod字段有长度限止(一般为32K)
    目前我的解决办法为用ADO(一定要用oracle provider for ole db,不能用microsoft ole db provider for oracle)
    当然,你有odac也不会有问题
      

  2.   

    220k的SQL串?有一里路长吗?我算了一下,如果是“宋体9号”字显示在屏幕上(英文字符宽6象素)220 * 1024 * 6 * 0.0254 / 96 = 357.632 米还不到一里呢.
      

  3.   

    各位老大,多谢支持。
    关于220k的SQL串有多长的问题,myy已经解决了。那就再讨论下为什么提交失败吧。我已经应keiy() 的建议,更换了数据库驱动,已经可以创建返还的参数了。但是执行还是报错,正在查找原因。也请有相关经验的弟兄,指点一二。
      

  4.   

    用ADO吧。。但是执行还是报错,正在查找原因
    -------------------------单步跟踪,慢慢找吧。。没有环境,没有代码,估计帮不了你