贴段别人写的ADOStoredProc1应用代码,存储过程以中文命名的,虽然有些不规范,原理尽在其中,包含存储过程的返回值获取,记录集的获取,参数传递。有些用ADOStoredProc进行操作时,要动态创建输入输出参数,其实用 ADOStoredProc1.Parameters.Refresh;将参数进行刷新一下就可以了。

procedure TForm1.Button1Click(Sender: TObject);
begin  //根据动态赋参数序号赋值
 ADOStoredProc1.Close;
 DataSource1.DataSet:=ADOStoredProc1;
 ADOStoredProc1.ProcedureName:='成绩查找';
 ADOStoredProc1.Parameters.Refresh;
 ADOStoredProc1.Parameters[1].Value:=200301001;
 ADOStoredProc1.Parameters[2].Value:=4;
 ADOStoredProc1.Parameters[3].Value:='SQL数据库';
 ADOStoredProc1.Open;
end;

procedure TForm1.Button5Click(Sender: TObject);
begin  //根据动态赋参数名称赋值
 ADOStoredProc1.Close;
 DataSource1.DataSet:=ADOStoredProc1;
 ADOStoredProc1.ProcedureName:='成绩查找';
 ADOStoredProc1.Parameters.Refresh;
 ADOStoredProc1.Parameters.ParamByName('@学号').Value:=200301001;
 ADOStoredProc1.Parameters.ParamByName('@学期').Value:=4;
 ADOStoredProc1.Parameters.ParamByName('@课程名称').Value:='SQL数据库';
 ADOStoredProc1.Open;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin //提取存储过程返回值
 ADOStoredProc1.Close;
 ADOStoredProc1.ProcedureName:='带返回值的成绩查找';
 ADOStoredProc1.Parameters.Refresh;
 ADOStoredProc1.Parameters.ParamByName('@学号').Value:=200301001;
 ADOStoredProc1.Parameters.ParamByName('@学期').Value:=4;
 ADOStoredProc1.Parameters.ParamByName('@课程名称').Value:='SQL数据库';
 ADOStoredProc1.Parameters.ParamByName('@结果').Value:=null;
 ADOStoredProc1.ExecProc;
 Edit1.Text:=IntToStr(ADOStoredProc1.Parameters.ParamByName('@结果').Value);
end;

procedure TForm1.Button3Click(Sender: TObject);
var i:integer;//提取存储过程返回的多个结果集的方法,
begin //返回第一个结果集
 DataSource1.DataSet:=ADODataSet1;
 if Button3.Caption='返回第一个结果集' then
 begin
   ADOStoredProc1.Close;
   ADOStoredProc1.ProcedureName:='学生';
   ADOStoredProc1.Open;
   ADODataSet1.Recordset:=ADOStoredProc1.Recordset;
   Button3.Caption:='返回第二个结果集';
 end else
 begin
   ADODataSet1.Recordset:=ADOStoredProc1.NextRecordset(i);
   DataSource1.DataSet:=ADODataSet1;
   Button3.Caption:='返回第一个结果集';
 end;
end;

最后修改:2009 年 08 月 16 日
一分也是爱