晕倒,要求用delphi的ADOStoredProc调用Oralce的存储过程,可delphi报了无数次的错,怎么改都不行,各位大虾快来看看啊:
//oracle中先建个表
CREATE TABLE XG_01_Y(
    EmpNo   VARCHAR(4) CONSTRAINT XG_01_Y_EmpNo_pk PRIMARY KEY,
    EmpName VARCHAR2(60),
    Sex     VARCHAR(2),
    BithD   VARCHAR(20),
    Identifier  VARCHAR(18),
    JiGuan  VARCHAR2(80),
    Adress  VARCHAR2(80),
    Phone   VARCHAR2(15),
    Others  VARCHAR2(100));//插入一行数据
Insert INTO XG_01_Y 
VALUES('6','6','6','6','6','6','6','6','6');
commit;//再在oracle中建个带存储过程的包,给delphi调用;过程需要的参数由下面的Edit1,Edit2获得。但运行后,不是报游标出问题,就是参数出错,怎么回事啊,彻底绝望啦。
CREATE OR REPLACE PACKAGE PKG_TEST AS 
    TYPE mycur IS REF CURSOR; 
    PROCEDURE Emp_Select (Condition IN VARCHAR2,Condition_Value IN VARCHAR2,cur OUT mycur); 
END PKG_TEST; CREATE OR REPLACE PACKAGE BODY PKG_TEST AS
 PROCEDURE Emp_Select(Condition IN VARCHAR2,Condition_Value IN VARCHAR2,cur OUT mycur)   IS 
    BEGIN   
         IF Condition = '编号' THEN     
            OPEN cur FOR
                'SELECT * FROM XG_01_Y  WHERE EmpNo = Condition_Value';
        END IF;
    END Emp_Select;
END PKG_TEST;//delphi中的代码:
procedure TForm1.Button1Click(Sender: TObject);
begin
  ADOStoredProc1.Close;
  ADOStoredProc1.Parameters.Clear;
  ADOStoredProc1.ProcedureName := 'PKG_TEST.EMP_SELECT';
  ADOStoredProc1.Parameters.CreateParameter('Condition',ftString,pdInput,100,Edit1.Text);
  ADOStoredProc1.Parameters.CreateParameter('Condition_Value',ftString,pdInput,100,Edit2.Text);
  //ADOStoredProc1.Parameters.CreateParameter('cur',ftCursor,pdOutput,0,0);
  ADOStoredProc1.Open;
end;//不加游标参数的话,就提示“未找到游标上下文,(无效的游标编号)”;加上游标参数cur,又提示“不正常地定义了参数对象,提供了不一致或不完整的信息”;要么就什么结果都没有,唉,如何是好啊?//而且,我要让存储过程的结果自动显示到Dbgrid中,而不要先select into变量 ,再手动一列一列添进去,该怎么实现呢?
我用
Form1.DataSource1.dataset:=Form1.ADOStoredProc1;
Form1.DBGrid1.datasource:=Form1.DataSource1;
可是,不行啊?!