在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 ;Query1.close;
Query1.clear ;
Query1.SQL.Add('begin SDB_TEST (''20021208'',''20021201'',''ABCD01'') ; end ;') ;
Query1.open ;错误信息是:Encountered the symbol '''' The symbol '''' was ignored.'.Process stopped.我查了好久都找不到原因,请高手指教,在线等待,谢谢!!

解决方案 »

  1.   

    Query1.close;
    Query1.clear ;
    Query1.SQL.Add('exec SDB_TEST ''20021208'',''20021201'',''ABCD01'' ') ;
    Query1.open ;
      

  2.   

    对不起,我写的是SQL下的用法。
    Oracle没有操作过存储过程。
    你的问题看看是否单引号原因,试试双引号。
      

  3.   

    Query1.SQL.Add('exec SDB_TEST ''20021208'',''20021201'',''ABCD01'' ') ; 我试过的,也是不行的。想问一下因为我是返回结果集的存储过程,用
    execute sdb_test 是不是不返回结果的。另,我用的就是双引号呀?不明白。
      

  4.   

    即使是三个参数也应该这样写
    Query1.SQL.Add('execute SDB_TEST('+''''+'20021208'+','+''''+'20021201'+''''+','+''''+'ABCD01'+''''+')'; 
      

  5.   

    风的往事,我觉得三个参数,按照你这样写,应该和我的结果是一样的吧,我现在没在公司没办法测。我是定义了四个参数,我不知道cursor的在delphi里面应该怎么定义和使用?
    另,我用storeproc的时候,我只用了3个参数,没有用cursor就可以了,我不
    知道TQuery控件是不是一定要用四个参数,请帮忙,谢谢!!