📄 fmmain.~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 + -