最近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串?
感谢各位的不吝赐教,顶着有分!
在用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串?
感谢各位的不吝赐教,顶着有分!
目前我的解决办法为用ADO(一定要用oracle provider for ole db,不能用microsoft ole db provider for oracle)
当然,你有odac也不会有问题
关于220k的SQL串有多长的问题,myy已经解决了。那就再讨论下为什么提交失败吧。我已经应keiy() 的建议,更换了数据库驱动,已经可以创建返还的参数了。但是执行还是报错,正在查找原因。也请有相关经验的弟兄,指点一二。
-------------------------单步跟踪,慢慢找吧。。没有环境,没有代码,估计帮不了你