用Delphi版或google查询相关资料,应该可以解决问题

解决方案 »

  1.   

    clientDataset.commandText:='select * from pkgName.ProName(...)';
    cliengDataset.open();
      

  2.   

    我的包过程如下:
    procedure GetClass(a number)
    is
    aaa varchar(30);
    begin  
        select CID into aaa from AaCLASS;
    end ;
    调用如下:
    procedure TForm1.Button1Click(Sender: TObject);begin
      cds_master.Close ;
      cds_master.CommandText := 'select * from pkg_JCCTEST1.GetClass(1)';
      cds_master.Open;
    end;执行到open时报错,sql命令未正确结束.这两个问题应该是开发中遇到的最最基本问题吧
    不知道delphi+oracle各位的报表怎么做出来的?
    返回数据集的都用临时表?
    不用临时表用游标吧,delphi中无法对应
    我说网上怎么就没一个完整一点的例子呢,都只在说行,真没劲,跟前段时间搞gis一样.
      

  3.   

    本人用游标可以实现,用delphi存储过程控件,可以用其对象参数
      

  4.   

    哪位有Clientdataset 的完整例子(存储过程的定义与调用)?
      

  5.   

    沉香屑 (大富翁)(2002-5-24 12:19:00)  
    例如查询scott下面的emp
    1.建包,定义游标类型和过程
    create or replace Package pkg_demo
    AS
      TYPE EmpCurTyp IS REF CURSOR RETURN emp%ROWTYPE;
      procedure open_emp_cv(emp_cv OUT EmpCurTyp);
    END pkg_demo;
    2。定义包体
    create or replace package body pkg_demo 
    AS
    procedure open_emp_cv (emp_cv OUT EmpCurTyp) 
    IS
    BEGIN
      OPEN emp_cv FOR SELECT * FROM emp;
    END open_emp_cv;
    end pkg_demo;
    3。建立ado连接,注意用oracle的provider,连接字符串里包含“PLSQLRSet=1”
    ADOConnection1.ConnectionString:='PLSQLRSet=1;Provider=OraOLEDB.Oracle;Password=tiger;Persist Security Info=True;User ID=scott;Data Source=fjddmis;Extended Properties=""';
    ADOConnection1.Open;
    4。用TADODataset调用存储过程,注意调用格式
    ADODataSet1.Connection:=ADOConnection1;
    ADODataSet1.CommandText:='{call pkg_demo.open_emp_cv}';
    ADODataSet1.CommandType:=cmdText;
    ADODataSet1.Open; 
    ------------------------ 这是 沉香屑 大侠在lid=1107306中的回答。很经典。  
    来自:jrq, 时间:2002-9-13 11:33:00, ID:1322683
    http://otn.oracle.com/docs/tech/windows/ole_db/doc/html/using.htm#1000470 如是说:
    哈哈哈哈哈,三层的我也搞定了,中间层再加一个adodataset,客户端还是clientdataset,
    把原来adodataset的代码放到clientdataset中即可。
    爽呀,过两天整理出来大家看看,唉,搞完之后觉得太小儿科了:)花了我三天时间,在csdn上苦苦等待三天,还是大富翁上找到答案,感谢沉香屑!!!!!好久没有这种感觉了,一个字,爽!!!!!
      

  6.   

    利用call 传递参数搞定:注意,call里面的参数用'?'来表示,传值通过params[i].as...=...我的两个问题都能解决了
      ClientDataSet1.Close ;
      ClientDataSet1.Params.Clear ;
      ClientDataSet1.CommandText := '{call pkg_JCCTEST1.GetClass2(?)}';
      ClientDataSet1.Params.CreateParam(ftinteger,'a',ptinput);
      ClientDataSet1.Params[0].AsInteger := 3 ;包中的过程如下;procedure GetClass2(a in number, b out rc_class2) 
    is
    begin open b for select aaclass.* from aaclass where pnumber >a;end ;
    表aaclass :三个字段
     cid :字符串            cname :字符串           pnumber :number(10,0)