⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 fmmain.~pas

📁 delphi中调用oracle的存储过程[分带返回游标
💻 ~PAS
字号:
unit fmMain;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, ADODB, DB, DBTables, Grids, DBGrids, StdCtrls, Buttons;

type
  Tfrm_Main = class(TForm)
    dbConn: TADOConnection;
    DS: TDataSource;
    DBGrid1: TDBGrid;
    DSet: TADODataSet;
    Query: TADOQuery;
    ADOQuery1: TADOQuery;
    sp: TADOStoredProc;
    GroupBox1: TGroupBox;
    Edit1: TEdit;
    Edit2: TEdit;
    Edit3: TEdit;
    btnCallProc: TBitBtn;
    btnQuery: TButton;
    Button1: TButton;
    btnGetProc: TButton;
    procedure btnCallProcClick(Sender: TObject);
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
    procedure btnQueryClick(Sender: TObject);
    procedure btnGetProcClick(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;

var
  frm_Main: Tfrm_Main;

implementation

{$R *.dfm}

procedure Tfrm_Main.btnCallProcClick(Sender: TObject);
begin
    dset.Close ;
    dset.CommandType :=  cmdText ;
    dset.Parameters.Clear ;

  //***利用call方法调用oracle过程时,参数必须由?来传, 即使你要传的参数为常理
  //输出游标的参数不需要指定!!!!!!,本来此函数带两个参数,我们这里只需要传一个参数.
  dset.CommandText := '{call JxfOracleProc(?,?,?) }' ;

  //***C 顺序有关,createparam必须放在commandtext赋值语句之后. 

  // 创建第一个参数,对应call中的第一个?,ftinteger为类型,10为长度,20为传入的实参值
  dset.Parameters.CreateParameter('sID',ftString,pdinput,10,'test');
  dset.Parameters.CreateParameter('sName',ftString,pdinput,10,'test');
  dset.Parameters.CreateParameter('iNum',ftinteger,pdinput,10,20);
  //下面调用ADODataSet1 的open方法,返回数据集(对应包过程的游标)
  Dset.Open ;
  exit;
  while not DSet.Eof do
  begin 
    showmessage('CID : '+string(dset.FieldByName('CID').Value) +
        '--CNAME :' + string(dset.FieldByName('CNAME').Value) +
        '--PNUMBER :' + string(dset.FieldByName('PNUMBER').Value)
        ) ;
    dset.Next ;
  end ;
end;

procedure Tfrm_Main.FormCreate(Sender: TObject);
begin
    dbConn.ConnectionString := 'OraOLEDB.Oracle.1;Password=jtest;Persist Security Info=True;User ID=jtest;Data Source=lotto;PLSQLRSet=1';
    dbConn.Connected := true;
end;

procedure Tfrm_Main.Button1Click(Sender: TObject);
begin
  //AdoQuery1.Close ;
  //AdoQuery1.Parameters.Clear ;
  //AdoQuery1.SQL.Clear ;

 // AdoQuery1.SQL.Add('{call JxfOraclePNone(?,?,?)}') ;
 //// AdoQuery1.Parameters.CreateParameter('sID',ftString,pdinput, 10,'test') ;
 // AdoQuery1.Parameters.CreateParameter('sName',ftString,pdinput, 10,'jxf') ;
 // AdoQuery1.Parameters.CreateParameter('iNum',ftinteger,pdinput, 10,22) ;
 // AdoQuery1.Active := true;
 AdoQuery1.Close;
 AdoQuery1.Parameters[0].Value := 'jjj';
 AdoQuery1.Parameters[1].Value := 'kkk';
 AdoQuery1.Parameters[2].Value := 51;
 AdoQuery1.Active := true;

end;

procedure Tfrm_Main.btnQueryClick(Sender: TObject);
var
  sID,sName,iNum:OleVariant;
  p:TParameter;
begin
      Query.Close;
      Query.Parameters.Clear;
      Query.SQL.Clear;
      Query.SQL.Add('{call JxfOracleProc(?,?,?)}');
      sID := 'ok';
      sName := 'jxf';
      iNum := 0;
      //p := Query.Parameters.CreateParameter('SID',ftString,pdInput,10,sID);
      //p.Parameters.
      //Query.Parameters.CreateParameter('@SNAME',ftString,pdInput,10,sName);
      //Query.Parameters.CreateParameter('@INUM',ftInteger,pdInput,10,iNum);
     // Query.Active := true;
     // AdoQuery1.Close;
     Query.Parameters[0].Value := edit1.Text;
     Query.Parameters[1].Value := edit2.Text;
     Query.Parameters[2].Value := edit3.Text;
     Query.Active := true;
end;

procedure Tfrm_Main.btnGetProcClick(Sender: TObject);
var
  vData:OleVariant;
begin
 try
   dset.Close ;
   dset.CommandType :=  cmdText ;
   dset.Parameters.Clear ;

  //***利用call方法调用oracle过程时,参数必须由?来传, 即使你要传的参数为常理
  //输出游标的参数不需要指定!!!!!!,本来此函数带两个参数,我们这里只需要传一个参数.
  dset.CommandText := '{call PKG_Test.getProc(?) }' ;

  //***C 顺序有关,createparam必须放在commandtext赋值语句之后. 

  // 创建第一个参数,对应call中的第一个?,ftinteger为类型,10为长度,20为传入的实参值
  dset.Parameters.CreateParameter('p_id',ftVariant,pdinput,0,1);
  //dset.Parameters.CreateParameter('p_rc',ftVariant,pdOutPut,0,null); //ftCursor
  //下面调用ADODataSet1 的open方法,返回数据集(对应包过程的游标)
  Dset.Open ;
 except
  on e:Exception do ShowMessage(e.Message);
 end;
end;

end.

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -