ADOStoredProc和ADOCommand或ADODataSet利用存储过程的区别,该如何处理
ADOStoredProc和ADOCommand或ADODataSet利用存储过程的区别
存储过程在SQL Server2000中已经设置好了:
create proc Ps_insert
@Fname char(10),
@Pplace char(10),
@price int
as
insert into
[asd] (Fname,Pplace,price)
values(@Fname ,@Pplace,@price)
GO
在BCB程序中想向表asd中插入数据可以用
ADOCommand->"insert..."
ADOCommand->"exec Ps_insert "+"cvb"+"fgh"+45;
还可以用ADOStoredProc,我请问这个要怎么用,还有ADOStoredProc和用ADOCommand会有多大区别?
------解决方案--------------------
TADOStoredProc是专门调用存储的一个组件,具体使用上TADOStoredProc需要设定过程名和参数,参数用"@"开头,具体你可以搜一下使用例子
------解决方案--------------------
procedure TForm2.Button1Click(Sender: TObject);
begin
try
with ADOStoredProc1 do
begin
Close;
Parameters.Clear;
Parameters.Refresh;
Parameters.ParamByName('@remark').Value:= Edit6.text;
Parameters.ParamByName('@riqi').Value:= DateTimeToStr(DateTimePicker1.DateTime);
Parameters.ParamByName('@czrenyuan').Value:= combobox1.text;
Parameters.ParamByName('@wuliaodaima').Value:= combobox2.text;
Parameters.ParamByName('@jcshuliang').Value:= Edit5.text;
prepared:=true;
execProc;
showmessage('结束');
end;
finally
ADOStoredProc1.Free;
end;
end;
然后是sql存储过程的代码
create proc jsj090412_jincang
(@riqi datetime, @czrenyuan varchar(10),@wuliaodaima varchar(10),@jcshuliang int,@remark varchar(20))
as
begin
set nocount on;
declare @danhao varchar(25),@kucun int
declare @driqi varchar(6), @dczrenyuan varchar(4),@dwuliaodaima varchar(4),@djcshuliang varchar(5)
select @kucun=kucun from jsj090412_wuliao where @wuliaodaima=jsj090412_wuliao.code
set @kucun=@kucun+@jcshuliang
update jsj090412_wuliao
set kucun=@kucun
where jsj090412_wuliao.code=@wuliaodaima
set @dczrenyuan=(substring(@czrenyuan,7,4))
set @driqi = (convert(varchar(10),@riqi,12))
set @dwuliaodaima = (substring(@wuliaodaima,2,4))
set @djcshuliang = (convert(varchar(5),@jcshuliang))
set @danhao = @driqi+@dczrenyuan+@dwuliaodaima+@djcshuliang
insert into jsj090412_jincangjilu values(@danhao,@riqi,@czrenyuan,@remark,@wuliaodaima,@jcshuliang)
end
go
------解决方案--------------------
ADOStoredProc专门封装调用存储过程的,所以调用方便些,
------解决方案--------------------
TADOStoredProc和TADODataSet都是继承自TCustomADODataSet,只不过侧重点不同。用TADODataSet也一样可以调用存储过程。
存储过程在SQL Server2000中已经设置好了:
create proc Ps_insert
@Fname char(10),
@Pplace char(10),
@price int
as
insert into
[asd] (Fname,Pplace,price)
values(@Fname ,@Pplace,@price)
GO
在BCB程序中想向表asd中插入数据可以用
ADOCommand->"insert..."
ADOCommand->"exec Ps_insert "+"cvb"+"fgh"+45;
还可以用ADOStoredProc,我请问这个要怎么用,还有ADOStoredProc和用ADOCommand会有多大区别?
------解决方案--------------------
TADOStoredProc是专门调用存储的一个组件,具体使用上TADOStoredProc需要设定过程名和参数,参数用"@"开头,具体你可以搜一下使用例子
------解决方案--------------------
procedure TForm2.Button1Click(Sender: TObject);
begin
try
with ADOStoredProc1 do
begin
Close;
Parameters.Clear;
Parameters.Refresh;
Parameters.ParamByName('@remark').Value:= Edit6.text;
Parameters.ParamByName('@riqi').Value:= DateTimeToStr(DateTimePicker1.DateTime);
Parameters.ParamByName('@czrenyuan').Value:= combobox1.text;
Parameters.ParamByName('@wuliaodaima').Value:= combobox2.text;
Parameters.ParamByName('@jcshuliang').Value:= Edit5.text;
prepared:=true;
execProc;
showmessage('结束');
end;
finally
ADOStoredProc1.Free;
end;
end;
然后是sql存储过程的代码
create proc jsj090412_jincang
(@riqi datetime, @czrenyuan varchar(10),@wuliaodaima varchar(10),@jcshuliang int,@remark varchar(20))
as
begin
set nocount on;
declare @danhao varchar(25),@kucun int
declare @driqi varchar(6), @dczrenyuan varchar(4),@dwuliaodaima varchar(4),@djcshuliang varchar(5)
select @kucun=kucun from jsj090412_wuliao where @wuliaodaima=jsj090412_wuliao.code
set @kucun=@kucun+@jcshuliang
update jsj090412_wuliao
set kucun=@kucun
where jsj090412_wuliao.code=@wuliaodaima
set @dczrenyuan=(substring(@czrenyuan,7,4))
set @driqi = (convert(varchar(10),@riqi,12))
set @dwuliaodaima = (substring(@wuliaodaima,2,4))
set @djcshuliang = (convert(varchar(5),@jcshuliang))
set @danhao = @driqi+@dczrenyuan+@dwuliaodaima+@djcshuliang
insert into jsj090412_jincangjilu values(@danhao,@riqi,@czrenyuan,@remark,@wuliaodaima,@jcshuliang)
end
go
------解决方案--------------------
ADOStoredProc专门封装调用存储过程的,所以调用方便些,
------解决方案--------------------
TADOStoredProc和TADODataSet都是继承自TCustomADODataSet,只不过侧重点不同。用TADODataSet也一样可以调用存储过程。