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;
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;