下面是我调用存贮过程的模式。因为ADOStoreProc在参数处理上好像有些问题,所以
最好自已动态生成参数,否则一会子方便,到时常常不定的出现"***"参数找不到的错
误会烦死你。
还有,最好在存贮过程中写上如果返回参数为空时的处理方法(赋一个默认值),否
则在读参数时会出错。
procedure TDM.GetMsg(var MsgInfo: TMsgInfo; Mid: Integer);
begin
with ADOStoreProc do
begin
if ProcedureName <> 'GetInfoBase' then
begin
ProcedureName := 'GetInfoBase';
Parameters.CreateParameter('@mid', ftInteger, pdInput, 0, Null);
Parameters.CreateParameter('@pid', ftInteger, pdInputOutput, 0, Null);
Parameters.CreateParameter('@info', ftString, pdInputOutput, 2000, Null);
Parameters.CreateParameter('@wherefrom', ftInteger, pdInputOutput, 0, Null);
Parameters.CreateParameter('@whereto', ftInteger, pdInputOutput, 0, Null);
Parameters.CreateParameter('@done', ftWord, pdInputOutput, 0, Null);
end;
Parameters.ParamByName('@mid').Value := Mid;
ExecProc;
MsgInfo.Pid := Parameters.ParamByName('@pid').Value;
MsgInfo.Info := Parameters.ParamByName('@info').Value;
MsgInfo.WhereFrom := Parameters.ParamByName('@wherefrom').Value;
MsgInfo.WhereTo := Parameters.ParamByName('@whereto').Value;
MsgInfo.Done := Parameters.ParamByName('@done').Value;
end;
end;