调用存储过程【Delphi版】

A)返回结果为参数

复制代码
var
Cn:TAdoConnection;
Sp:TAdoStoredProc;
recordCount: string;
begin
Cn := TAdoConnection.Create( nil);
try
Cn.ConnectionString := [数据库连接字符串];
Cn.LoginPrompt := False;
Cn.KeepConnection := True;
Cn.ConnectionTimeout:= 2;
try
Cn.Open;
Sp := TAdoStoredProc.Create( nil);
try
Sp.Connection := Cn;
Sp.Close;
Sp.ProcedureName := ' getStudentAmount ';
Sp.Parameters.Refresh;//参数的初始化要放在refresh之后
Sp.Parameters.ParamByName( ' @recordCount ').Value:= 0;//存储过程中每一个参数都要
Sp.ExecProc; //初始化,包括“返回参数”
recordCount:= inttostr(Sp.Parameters.ParamByName( ' @recordCount ').Value);
finally
Sp.Free;
end;
except
on E:EoleException do
begin
ShowMessage( ' 数据库连接失败,请检查连接 ');
end;
end;
finally
Cn.Free;
end;
end;
复制代码

B)返回结果为数据集

1)单个数据集

复制代码
var
  Cn:TAdoConnection;
  Sp:TAdoStoredProc;
  nameFieldString:string;
begin
  Cn := TAdoConnection.Create(nil);
  Sp := TAdoStoredProc.Create(nil);
  try
    Cn.ConnectionString := [数据库连接字符串];
    Cn.LoginPrompt := False;
    Cn.KeepConnection := True;
    Cn.ConnectionTimeout:=2;
    try
      Cn.Open;
      Sp.Connection := Cn;
      Sp.Close;
      Sp.ProcedureName :='queryAllStudentInfo';
      Sp.Parameters.Refresh;
      Sp.Active:=True;//当返回结果是数据集时,一定要激活,但是“有参数时”必须放在参数初始化之后
      Sp.open;//返回的是参数时只能用ExecProc,返回的是数据集时用Open,返回的既有参数又有数据集合也用Open
      whilenot Sp.Eof do
      begin
        nameFieldString:=Sp.FieldByName('SName').AsString;
        nameFieldString:=Trim(nameFieldString);
        Sp.Next;
      end;
    except
      on E:EoleException do
      begin
        ShowMessage('数据库连接失败,请检查连接');
      end;
    end;
  finally
    Sp.Free;
    Cn.Free;
  end;
end
复制代码

2)多个数据集

复制代码
var
      Cn:TAdoConnection;
      Sp:TAdoStoredProc;
      AdoQuery:TAdoQuery;
      nameFieldString:string;

      aintf:_Recordset;
      RecordsAffected:OleVariant;
begin
    Cn := TAdoConnection.Create(nil);
    try
       Cn.ConnectionString :=MainForm.DatabaseConnStr;
       Cn.LoginPrompt := False;
       Cn.KeepConnection := True;
       Cn.ConnectionTimeout:=2;
       try
          Cn.Open;
          Sp := TAdoStoredProc.Create(nil);
          AdoQuery:=TAdoQuery.Create(nil);
          try
            Sp.Connection := Cn;
            Sp.Close;
            Sp.ProcedureName :='CIB_GetCheckAccountFileInfo';
            Sp.Active:=True;//当返回结果是数据集时,一定要激活
            Sp.Parameters.Refresh;
            Sp.Active:=True;//当返回结果是数据集时,一定要激活,但是“有参数时”必须放在参数初始化之后
            Sp.open;//返回的是参数时只能用ExecProc,返回的是数据集时用Open,返回的既有参数又有数据集合也用Open

            aintf:=Sp.Recordset;
            AdoQuery.Recordset:=aintf;
            whilenot AdoQuery.Eof do
            begin
               nameFieldString:=AdoQuery.FieldByName('市场应用代码').AsString;
               nameFieldString:=Trim(nameFieldString);
               showmessage('市场应用代码为:'+nameFieldString);
               AdoQuery.Next;
            end;

            aintf:=aintf.NextRecordset(RecordsAffected);
            AdoQuery.Recordset:=aintf;
            whilenot AdoQuery.EOF do
            begin
              nameFieldString:=AdoQuery.FieldByName('市场帐号').AsString;
              nameFieldString:=Trim(nameFieldString);
              showmessage('市场帐号为:'+nameFieldString);
              AdoQuery.Next;
            end;
          finally
            AdoQuery.Free;
            Sp.Free;
          end;
       except
          on   E:EoleException   do
          begin
            ShowMessage('数据库连接失败,请检查连接');
          end;
       end;
    finally
      Cn.Free;
    end;
end;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值