改变ADOStoreProcedure的ProcedureName的问题,看看(50分)

  • 主题发起人 主题发起人 yankk
  • 开始时间 开始时间
Y

yankk

Unregistered / Unconfirmed
GUEST, unregistred user!
procedure TForm1.Button1Click(Sender: TObject);
begin
with ADOStoreProcedure1 do
begin
close;
ADOStoreProcedure1.ProcedureName:='cp_QueryCaseByCometime;1';
parameters.ParamByName('@ct1').Value:=dtp1.DateTime;
parameters.ParamByName('@ct2').Value:=dtp2.DateTime;
open;
end;
原来ADOStoreProcedure1的ProcedureName为另外一个没有参数的存储过程
cp_QueryCaseByCometime中有两个参数:@ct1、@ct1
但是报错为找不到参数@ct1
 
ADOStoreProcedure会自做主张的为你加一个参数,

你在窗体上放一个ADOStoreProcedure设好ProcedureName再打开Parameters就会发现多了一个参数。

我是用静态设置的方法来解决的,设置好后删除这个自动产生的参数。
 
To blue_morning:
procedure TForm1.Button1Click(Sender: TObject);
begin
with aps do
begin
close;
aps.Parameters.Clear;
aps.ProcedureName:='sp_QueryCaseByCometime;1';
parameters[1].Value:=dtp1.DateTime;
parameters[2].Value:=dtp2.DateTime;
open;
SetDbgrideWideth(dbgrid1)
end;

end;
把参数清楚也不行啊
 
To blue_morning:

把你的方法写出来么?
详细的代码
 
...
ADOStoredProc1.Close;
ADOStoredProc1.ProcedureName := 'CP_SV_AutoPhoneList';
ADOStoredProc1.Parameters.Clear; //clear old paramters
ADOStoredProc1.Parameters.CreateParameter('Phone',ftString,pdInput,20,'137'+IntToStr(I));
ADOStoredProc1.Parameters.CreateParameter('Type',ftString,pdInput,1,'2');
ADOStoredProc1.Parameters.CreateParameter('Ret',ftString,pdOutput,10,'100');
ADOStoredProc1.ExecProc;
ShowMessage(ADOStoredProc1.Parameters[0].Value+' '+ADOStoredProc1.Parameters[1].Value+' '+ADOStoredProc1.Parameters[2].Value);
...
 
这个问题不需要写代码
这样解决
你把Parameters下的参数的类型设成相应的类型即可
 
wyh919说得对。
 
不用那么麻烦,REFRESH一下,就OK了。
adostoredproc1.ProcedureName:='PROC1';
adostoredproc1.Refresh;
 
记得参数也要Refresh
 
用parameters.parameByname('@cs1').value
怎么不行?
我用ADOStoredProc1.Parameters.CreateParameter('Ret',ftString,pdOutput,10,'100');
说参数不够
 
接受答案了.
 
后退
顶部