B
bigfly
Unregistered / Unconfirmed
GUEST, unregistred user!
问题一 :在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_testP1,2,3,4) ; 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_testP1,2,3,4) ; 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) ;