一个storedproc 分别连多个oracle存储过程?(100分)

  • 主题发起人 wshuming
  • 开始时间
W

wshuming

Unregistered / Unconfirmed
GUEST, unregistred user!
一个storedproc 已经显示地打开数据库,并设置了storedprocname为"SPZH1",
这时我用以下语句可以
storedproc1.StoredProcName:='SPZH1';
storedproc1.ParamByName('VNY').asstring:=cmb_year.text+cmb_month.text;
storedproc1.Prepare;
storedproc1.execproc;
但是接着连到另外一个存储过程
storedproc1.StoredProcName:='SPZH2';
storedproc1.ParamByName('VNY').asstring:=cmb_year.text+cmb_month.text;
storedproc1.Prepare;
storedproc1.execproc;
就出错了,说没有vny 这个参数,但是这两个存储过程都是有参数vny 的?
 
你可以调用storeproc1.params.AddParam
AddParam, RemoveParam example
{ Move all parameter info from Params2 to Params1 }
while Params2.Count <> 0 do
begin
{ Grab the first parameter from Params2 }
TempParam := Params2[0];
{ Remove it from Params2 }
Params2.RemoveParam(TempParam);
{ And add it to Params1 }
Params1.AddParam(TempParam);
end;
或先建立一个TempStoreProc把参数设好. 然后使后
TStoredProc1.CopyParams(TempStoredProc.Params);
 
每次调用的时候
storedproc1.StoredProcName:='SPZH1';
storedproc1.close;
storedproc1.Params.clear //将参数清空
storedproc1.params.createparams....//动态生成参数,注意生成的时候
// 按存储过程的参数顺序
storedproc1.ParamByName... //赋参数值,
storedproc1.Prepare;
storedproc1.execproc;
 
补充一点
还要设置
TStoredProc1.Parameters.DataType:=ftstring;
TStoredProc1.Parameters.Direction:=pdoutput;

建议你居然用了一个TStoredProc1了,你没必要只用一个了
你多家几个TStoredProc,不会增加什么系统消耗的了
 
一开始我也是这个问题 使用动态加载参数就解决了
 
多人接受答案了。
 
顶部