再问存储过程控件怎样将Oracle数据库中返回数据集(急!)(200分)

  • 主题发起人 主题发起人 cq_139
  • 开始时间 开始时间
C

cq_139

Unregistered / Unconfirmed
GUEST, unregistred user!
存储过程控件怎样将Oracle数据库中返回数据集?
Oracle数据库能不能通过存储过程控件返回数据集?
请附详细原码(Oracle,Delphi)
请各位高手指点。谢谢!
 
我想这个和什么类型数据库关系不大,query1里写SQL,用open打开就是
 
在ORACLE中,要返回数据集,可有二种方法,
1、通过PL/SQL的表,实现方法,可参考机械工业出版社
出版的PL/SQL程序设计

2、在TQUEY中定存储过程,但要注意,TQUEYR不支持一些PL/SQL语句
 
在Oracle中用存储过程返回数据集我已成功,
但怎样用Delphi得到这些数据集并显示呢(急)?
 
TO:CQ_139
请问如何在ORACLE中用存储过程返回数据集?我试过很多次都不行。
能否给出一个存储过程例子。谢谢!!
至于在DELPHI中要显示存储过程返回的数据集,直接把DATASOURCE中的DATASET设置为
你所用的StoredProc则可,用法和TABLE一样。我在SQLSERVER+DELPHI时可以成功使用,
但在ORACLE+DELPHI时则不行,不知为何?
 
有关存储过程返加结果集,及DELPHI显示结果集方法代码如下;
存储过程返加结果集
1、生成一TEST表
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);
2、生成一个包
CREATE OR REPLACE PACKAGE TypeDefine
AS
TYPE Cursor_Test IS REF CURSOR RETURN Test%ROWTYPE;
END;
3、生成一个存储过程;
CREATE OR REPLACE PROCEDURE sp_test
(resultData IN OUT TypeDefine.Cursor_Test)
AS
BEGIN
OPEN resultData FOR
SELECT a,b from test;

END;
4、在ORACLE中执行测试:
  VARIABLE v REFCURSOR;
EXECUTE sp_test(:v);
PRINT :v;

5、在DELPHI显示结果集:
 需用控件StoredProc1、DataSource1、DBGrid1
 StoredProc1=SP_TEST,参数RESULTDATA=ftCursor,设StoredProc1=TRUE
   可从 DBGrid1看到所返加的结果集

 
没问题
用oracle procedure builder,oracle developer,oracle designer 或sql*plus
例:create or replace function sumdeptsalary(dept_no in number)
return number is
total number(11,2);
begin
select sum(sal) into total
from emp
where deptn=dept_no;
return(total);
end;

tstoredproc.params[]的paramtype 属性:ptresult
datatype 属性:ftfloat
paramtype 属性:ptinput
 
使用Tstoredproc,storedproc1.databasename=数据库名(或别名),如存储过程有参数,则
连接数据库,设置storedproc1.params,在程序中为参数赋值,
如storedproc1.parambyname('参数名').asstring:='';storedproc1.prepare;然后执行存储过程,
storedproc1.active:=true;最后把存储过程当作query来处理进行数据的操作。
注意存储过程是否产生数据集(select * from mytable)
 
同意楼上的
 
To:zsp
我用的正是你现在用的这种方法,但在设置StoredProc控件的Active为True时
Delphi5总是报错,错误码为: Operation not applicable.
我用的数据库为Oracle 8i (8.1.5)
还望赐教,不胜感激!
 
TO cq_139:
我又测试了一次,结果是对的,对于你的问题:
1、在ORACLE测试通过了吗
2、有把StoredProc的参数设为ftCursor,paramtype=ptInputOutput
 
to cq_139

我用的数据库为Oracle 8i (8.1.5),没问题

 
To:ZSP
在Oracle中我已返回了数据集,可在Delphi中我还是碰到上次一样的错误,
我检查了StoredProc的参数,和你说的一样,这是为什么呢?
  BDE中需要设置吗?
 
To:jinrui
你在Delphi中实现了吗?
 
我也没成功。
 
我成功实现。你delphi与oracle 连上了吗?????????????????
在oracle 建的stored funcation 代码我上面写了,有点错应
(tstoredproc.params[0]datatype 属性:ftfloat
tstoredproc.params[1]的paramtype 属性:ptresult
datatype 属性:ftfloat
paramtype 属性:ptinput)
tstoredproc 的name(storedproc1) ,databasename(bde中设的别名),storedprocname(sumdeptsalary)
button1(调用stored functon)添两个Tedit
stroedproc1.params[1].asfloat:=strtoint(editdeptid.text);
storedproc1.prepare;
storedproc1.execproc;
editsalary.text:=floattostr(storedproc1.params[0].asfloat);
 
To cq_139:
你的BDE连上了吗?说说你的BDE配置
 
TO:zsp
我没有使用BDE连数据库,通过ODBC连的数据库。
如使用BDE,应该注意的地方有哪些呢?
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
1K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
923
SUNSTONE的Delphi笔记
S
后退
顶部