调用存储过程问题。在线等,急!!!(200分)

  • 主题发起人 主题发起人 erbird
  • 开始时间 开始时间
E

erbird

Unregistered / Unconfirmed
GUEST, unregistred user!
我在oracle建了一个存储过程,功能是查询返回一个数据集,在delphi中用BDE调用是没问题的,
用ado的adodataset调用也是没问题的,现在我要用adoStoredProc调用,不行。用ado调用时
用的是Microsoft OLE DB Provider for Oracle,改用Oracle Provider for OLE DB也不行,
请问是怎么回事??下面是我的存储过程:
create table test( a number,b number);
insert into test values(111,222);
insert into test values(11,22);
insert into test values(1,2);

CREATE OR REPLACE PACKAGE TypeDefine
AS
TYPE Cursor_Test IS REF CURSOR RETURN Test%ROWTYPE;
END;

CREATE OR REPLACE PROCEDURE sp_test
(resultData IN OUT TypeDefine.Cursor_Test)
AS
BEGIN
OPEN resultData FOR
SELECT a,b from test;
END;
 
你把报的错误写下来,不然我怎么知道是那里错了。
 
我把ADOStoredProc的Active设为true时提示:ORA-01036非法的变量名/编号。其中parameter
的RESULTDATA的属性是默认的,datatype为ftInterface,direction为pdInputOutput.
 

可能是OLE DB provider的版本较低的缘故,你下载一个
最新的看看。
 
我下载的ado已经是2.7版本了。
 
只有试了:你不要让程序运行,把要传入的参数值都设置好,然后让adoStoredProc连
一个Datasource,再连一个显示结果的控件,然后把adoStoredProc.active:=true.
这样看,能不能出来结果。这如果通过了,其它的也就能行。
 
TO wumeng:
我的这个存储过程就是调程序用的,我放了一个ADOConnection、DataSource、ADOStoredProc
和一个DBGride控件,每次让adoStoredProc.active:=true时都出现以上的错误。

请各位帮帮忙,不够分再加。
 
中午休息,下午继续,希望大家帮忙!
 
很奇怪,下午不知道为什么能显示了。但是打开一个存储过程后能正常显示,删除原来的
存储过程名称,再打开另一个存储过程时就出错:绑定信息无效。重新连接adoconnection
也不行,重起以后才行。很不正常啊!
 
ado 连 Oracle够呛,还不如用 BDE呢!
 
我也知道,情况是这样的,原来我们是用SQL Server数据库,程序全部写好了,客户突然
改用oracle。我们在程序中使用了很多存储过程,痛苦啊!!
 
这是以前一位大虾说的:
如果是用oracle的provider,在连接字符串里加上PLSQLRSet=1,放在字符串开头
例如:
ConnectStr:=Format('PLSQLRSet=1;Password=%s;User ID=%s;
Data Source=%s;Extended Properties=""',[Password,UserName,DatabaseName]);
调用存储过程时,不要设置cursor类型的param
并且不能用PL/SQL格式调用
必须这样调:
'{CALL open_zzzzzzz}' open_zzzzzzz是一个带cursor参数的存储过程
直接在dataset里执行,dataset的属性要设为cmdText
因为procedure实际上就是把CommandType设为cmdStoredProc的dataset
如果是用微软的provider
把dataset的属性设为cmdStoredProc
不要加大括号和call,也不用设cursor型的param,
直接用存储过程名调用'open_zzzzzzz'
连接字符串不要加PLSQLRSet=1
但是微软的provider不能返回含有blob的cursor
注意存储过程要写成标准的PLSQL格式,加上Begin,End
 
楼上兄弟说的我注意到了,我现在还没运行程序呢,只是把adoStoredProc.active:=true。
ADO连接oracle真的那么不稳定?
 
adoStoredProc的prepared属性设为true就行了
 
不行啊,还是提示:绑定信息无效。
 
你查一下ADO操作ORA的资料吧。看来这又是DELPHI的一个不稳定的BUG。
 
这个存储过程怎么不能查询!我把存储过程改为:
CREATE OR REPLACE PROCEDURE sp_test
(resultData IN OUT TypeDefine.Cursor_Test)
AS
BEGIN
OPEN resultData FOR
SELECT a,b from test
where a = 'resultData';
END;不知道为什么非要在resultData加上''才能编译,a可是number型啊。在调试程序中我放了
database、storedProc,datasource、dbgride、edit和一个button控件,代码为:
procedure TForm1.Button1Click(Sender: TObject);
begin
StoredProc1.Active:=False;
StoredProc1.Params.ParamByName('resultData ').Value:=Trim(Edit1.Text);
StoredProc1.Active:=True;
end;
运行时在edit中输入数值,查询时能显示表的各个字段,但是显示不了记录,请问是为什么??
 
感觉上不对劲,具体的不知道怎么写,请大家帮帮忙。
 
查询的问题我已经自己解决了,要另外定义一个输入参数,才能传值进去。
但是老问题还没解决,在BDE中我都能正常运行,一用ADO就说“非法的变量名/编号”,
再运行就提示:未指定的错误。
请问是什么原因??
这个问题一解决就给分。还有
http://www.delphibbs.com/delphibbs/dispq.asp?lid=1228838一起结。
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
928
SUNSTONE的Delphi笔记
S
D
回复
0
查看
844
DelphiTeacher的专栏
D
后退
顶部