问题一 :在delphi中我使用Tstoreproc 控件调用存储过程是可以的,但是使用TQuery控件的时候
有问题。我用的是oracle 8i,BDE里面的设置应该没问题。下面的是代码:CREATE OR REPLACE PACKAGE Typedefine IS
TYPE mytype IS RECORD
(LOTID VARCHAR (40) ,
SHIFT VARCHAR (2) ,
PRODUCTNAME VARCHAR (40) );
TYPE my_cursor IS REF CURSOR RETURN mytype ;
END ;
CREATE OR REPLACE PROCEDURE sdb_test
(enddate IN VARCHAR2,startdate IN VARCHAR2,
Eqpid IN VARCHAR2,my_cursor IN OUT Typedefine.my_cursor)
IS
BEGIN
OPEN my_cursor FOR
SELECT lotid,shift,productname
FROM
temp_table
where shiftenddate=enddate
and shiftstartdate=startdate
ORDER BY txntimestamp ;
END ;delphi中的程序是:
var
P1,P2,P3,P4:TParam ;
begin
Query1.Close ;
Query1.ParamCheck :=False ;
Query1.SQL.Clear ; P1 := TParam.Create(Query1.Params, ptInput);
P2 := TParam.Create(Query1.Params, ptInput);
P3 := TParam.Create(Query1.Params, ptInput);
P4 := TParam.Create(Query1.Params, ptInputOutput); Query1.Params[0].datatype := ftString ;
Query1.Params[1].datatype := ftString ;
Query1.Params[2].datatype := ftString ;
Query1.Params[3].datatype := ftCursor ;
Query1.SQL.Add('BEGIN sdb_test(:P1,:P2,:P3,:P4) ; END ;') ;
Query1.Params[0].AsString :='20021208' ;
Query1.Params[1].AsString :='20021201' ;
Query1.Params[2].AsString :='ABCD01' ;
Query1.ExecSQL ;
// Query1.Open ;
P1.Free ;
P2.free ;
P3.free ;
P4.free ;
end;
会报错,'can't find object ',应该就是不认识我设的参数 P1 P2 P3 ,
应该是我还是有不清楚的地方。
另,我用sqlplus 测试可以通过
variable v refcursor ;
execute sdb_test('20021208','20021201','ABCD01',:v) ;
有问题。我用的是oracle 8i,BDE里面的设置应该没问题。下面的是代码:CREATE OR REPLACE PACKAGE Typedefine IS
TYPE mytype IS RECORD
(LOTID VARCHAR (40) ,
SHIFT VARCHAR (2) ,
PRODUCTNAME VARCHAR (40) );
TYPE my_cursor IS REF CURSOR RETURN mytype ;
END ;
CREATE OR REPLACE PROCEDURE sdb_test
(enddate IN VARCHAR2,startdate IN VARCHAR2,
Eqpid IN VARCHAR2,my_cursor IN OUT Typedefine.my_cursor)
IS
BEGIN
OPEN my_cursor FOR
SELECT lotid,shift,productname
FROM
temp_table
where shiftenddate=enddate
and shiftstartdate=startdate
ORDER BY txntimestamp ;
END ;delphi中的程序是:
var
P1,P2,P3,P4:TParam ;
begin
Query1.Close ;
Query1.ParamCheck :=False ;
Query1.SQL.Clear ; P1 := TParam.Create(Query1.Params, ptInput);
P2 := TParam.Create(Query1.Params, ptInput);
P3 := TParam.Create(Query1.Params, ptInput);
P4 := TParam.Create(Query1.Params, ptInputOutput); Query1.Params[0].datatype := ftString ;
Query1.Params[1].datatype := ftString ;
Query1.Params[2].datatype := ftString ;
Query1.Params[3].datatype := ftCursor ;
Query1.SQL.Add('BEGIN sdb_test(:P1,:P2,:P3,:P4) ; END ;') ;
Query1.Params[0].AsString :='20021208' ;
Query1.Params[1].AsString :='20021201' ;
Query1.Params[2].AsString :='ABCD01' ;
Query1.ExecSQL ;
// Query1.Open ;
P1.Free ;
P2.free ;
P3.free ;
P4.free ;
end;
会报错,'can't find object ',应该就是不认识我设的参数 P1 P2 P3 ,
应该是我还是有不清楚的地方。
另,我用sqlplus 测试可以通过
variable v refcursor ;
execute sdb_test('20021208','20021201','ABCD01',:v) ;
解决方案 »
- DBGRIDEH控件如何在第一列上同时显示图标和序号(图标要根据当前记录中一字段的值产生变生)
- 简单图形处理
- 时间相加后,如何判断相加后的这个时间是今天的还是明天的!!
- 单位联网收费,每个月都要打很多收据,我想写个能实现自动打印收据的程序,主要功能是在号码栏自动输入已保存的号码
- 怎么样可以调用API将一个指定的文本文档打开?
- 如何改变Excel的网格颜色。
- delphi中如何进行数据库字段的运算?如对某个字段的立方求和
- 我需要访问Access2000的数据库用那种方式最快?是用ADO还是用ODBC
- 问个程序编译的问题
- 关于操作注册表
- 怎样取得读写数据库时的Exception ?(用ADOQuery)
- delphi连接SQL Server2000网络怎么设置
->
my_cursor OUT Typedefine.my_cursor)