建议你这样做 with adostoredproc1.parameters do begin Clear; CreateParameter('@ReTurn_value', ftInteger, pdreturnvalue,0,(null)); //该参数用来返回存储过程的执行请况,看看书就知道了,他有5种,0是成功 CreateParameter('@customerid', ftString, pdInput, 10, VINET); end; adostoredproc1.ExecProc;
如果参数从0开始,则错误提示为list index out of bound(0)
with adostoredproc1 do begin //procedurename:='custordersorders;1'; //parameters[1].Name:='@customerid'; //parameters[1].DataType:=ftstring; // parameters[1].value:='VINET'; Parameters.ParamByName('@customerid').Asstring:='VINET'; ExecProc; end; 就OK 了
with adostoredproc1do begin Close; // parameters.Clear; CreateParameter('@ReTurn_value', ftInteger, pdreturnvalue,0,(null)); CreateParameter('@customerid', ftString, pdInput, 10, VINET); ExecProc; close; end;
要赋值的阿老兄 parameters.parambyname('').value := '';
to boyqing(阿清) : 你的方法固然简单,但会有小小的问题,举例:当这个存储过程有多条SQL命令,全部执行通过没问题,若第一条语句通过,无论后面发生什么样的错误,Query1不会报错,Delphi截获不到这个错误。所以我建议使用存储过程控件。 -------------------------------------------------------------------- 动态加载存储过程参数,注意赋值全面: ADOSP.Parameters.Clear; //清空参数列表 with ADOSP.Parameters.AddParameter do //追加新参数 begin Name:='@Code'; //参数名 DataType:=ftString; //类型 Direction := pdInput; //输入输出类型 Size:=4; //长度 end;
with adostoredproc1.parameters do
begin
Clear;
CreateParameter('@ReTurn_value', ftInteger, pdreturnvalue,0,(null));
//该参数用来返回存储过程的执行请况,看看书就知道了,他有5种,0是成功
CreateParameter('@customerid', ftString, pdInput, 10, VINET);
end;
adostoredproc1.ExecProc;
begin
//procedurename:='custordersorders;1';
//parameters[1].Name:='@customerid';
//parameters[1].DataType:=ftstring;
// parameters[1].value:='VINET';
Parameters.ParamByName('@customerid').Asstring:='VINET';
ExecProc;
end;
就OK 了
p1:Tparam;
^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
begin
storedprocname:= ('custordersorders;1')
params.clear;
p1 := Tparam.create(params,ptinput)
try
params[0].name :='@customerid';
parambyname('@customerid').asstring :='VINET';
execproc;
finally
p1.free;
end;
我靠,我是写出来的,累死我了,这下又死了不知道多少脑细胞。没有经过编译
的,但我想应该差不多的,你可以试一下
ADOStoredProc1.Parameters.AddParameter;
ADOStoredProc1.Parameters[0].Value:='sysobjects';
ADOStoredProc1.ExecProc;ok
例如
with query1 do
begin
close;
sql.clear;
sql.add('execute 存储过程名 :参数1,:参数2');
parambyname('参数1').asstring:=
parambyname('参数2').asstring:=
open; //只能使用OPEN;
end;
//用ADOQUERY还是一样的方法
使用存储过程不就是传入一条sql 语句给dbms吗?所以用query,adoquery是比较理想的
begin
Close; //
parameters.Clear;
CreateParameter('@ReTurn_value', ftInteger, pdreturnvalue,0,(null));
CreateParameter('@customerid', ftString, pdInput, 10, VINET);
ExecProc;
close;
end;
parameters.parambyname('').value := '';
--------------------------------------------------------------------
动态加载存储过程参数,注意赋值全面: ADOSP.Parameters.Clear; //清空参数列表
with ADOSP.Parameters.AddParameter do //追加新参数
begin
Name:='@Code'; //参数名
DataType:=ftString; //类型
Direction := pdInput; //输入输出类型
Size:=4; //长度
end;