sql里面
create procedure wm(
@a int,
@b int output
)
as
begin
set @b=@a+1
end
GOdelphi中设置ADOConnection1,连接无误
设置ADOStoredProc1,connetion:='ADOConnection1'
然后:procedure TFm_main.FormCreate(Sender: TObject);
var a:integer;
b:integer;
begin
a:=1;
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin
ProcedureName:='wm';
Parameters.Clear;
parameters.parambyname('@a').Value:= a;
prepared:=true;
open;
end;
b:= Fm_FDM.ADOStoredProc1.fields[0].AsInteger;
showmessage('b='+inttostr(b));
end;报错 'ADOStoredProc1: Parameter '@a' not found'啥问题?我第一次用delphi存储过程,一定要什么关键点?
指点一下。
create procedure wm(
@a int,
@b int output
)
as
begin
set @b=@a+1
end
GOdelphi中设置ADOConnection1,连接无误
设置ADOStoredProc1,connetion:='ADOConnection1'
然后:procedure TFm_main.FormCreate(Sender: TObject);
var a:integer;
b:integer;
begin
a:=1;
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin
ProcedureName:='wm';
Parameters.Clear;
parameters.parambyname('@a').Value:= a;
prepared:=true;
open;
end;
b:= Fm_FDM.ADOStoredProc1.fields[0].AsInteger;
showmessage('b='+inttostr(b));
end;报错 'ADOStoredProc1: Parameter '@a' not found'啥问题?我第一次用delphi存储过程,一定要什么关键点?
指点一下。
var a:integer;
b:integer;
begin
a:=1;
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin
Close;
ProcedureName:='wm';
Parameters.Clear;
Parameters.Refresh;
parameters.parambyname('@a').Value:= a;
open;
end;
b:= parameters.parambyname('@b').Value;
showmessage('b='+inttostr(b));
var a:integer;
b:integer;
begin
a:=1;
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin
Close;
ProcedureName:='wm';
Parameters.Clear;
Parameters.Refresh;
parameters.parambyname('@a').Value:= a;
ExecProc;{-------------应该这样}
end;
b:= parameters.parambyname('@b').Value;
showmessage('b='+inttostr(b));
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin ProcedureName:='wm';
Parameters.Clear;
Parameters.Refresh; parameters.parambyname('@a').Value:= a;
parameters.parambyname('@b').Value:= b;
prepared:=true;
open;
end;
b:= Fm_FDM.ADOStoredProc1.parameters.parambyname('@b').Value;
showmessage('b='+inttostr(b));
试了结果:'ADOStoredProc1.CommandText does not return a result set'
parameters.parambyname('@a').Value:= a;
//parameters.parambyname('@b').Value:= b; {B是返回参数,不是传入参数}
//prepared:=true;
//open;
ExecProc;
直接拷贝出代码:
a:=1;
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin
close;
ProcedureName:='wm';
Parameters.Clear;
Parameters.Refresh; parameters.parambyname('@a').Value:= a;
ExecProc;
end;
b:= Fm_FDM.ADOStoredProc1.parameters.parambyname('@b').Value;
showmessage('b='+inttostr(b));SQL:
CREATE procedure wm(
@a int,
@b int output
)
as
begin
set @b=@a+1
end
GO
Parameters.Clear; 和 Parameters.Refresh; 有什么区别?
Parameters.Refresh起什么作用?
b:=1;
with Fm_FDM.ADOStoredProc1 do
begin
close;
ProcedureName:='wm';
Parameters.Clear;
Parameters.Refresh; parameters.parambyname('@a').Value:= a;
parameters.parambyname('@b').Value:= b;
ExecProc;
end;
b:= Fm_FDM.ADOStoredProc1.parameters.parambyname('@b').Value;
showmessage('b='+inttostr(b));就对了,说明@b是个输入/输出参数,那么仅仅是输出的参数怎么表达呢?
create procedure wm(
@a int,
@b int=0 output
)
as
begin
set @b=@a+1
RETURN @b
end
GO
调用:procedure TForm1.Button2Click(Sender: TObject);
var
a:integer;
begin
a:=1;
with ADOStoredProc1 do begin
close;
ProcedureName:='wm';
Parameters.Clear;
Parameters.Refresh;
parameters.parambyname('@a').Value:= a;
ExecProc;
edit1.Text:=inttostr(parameters.parambyname('@b').Value);
end;
end;