有时我收到以下错误:过程或函数需要未提供的参数

时间:2017-03-29 14:03:34

标签: sql-server-2008 ado

首先我要强调的是,此代码在99%的时间内都有效,但每隔一段时间客户就会抱怨收到此错误。我有用于将2个参数传递给存储过程的波纹管代码。 frmSetLoggerTime是一个带有datetimepicker(dtpToDate)的表单。 有人遇到过这个问题吗?我正在使用Borland Delphi 7和SQL Server 2008。

enter image description here

procedure TFormDBManager.ActionSetLoggerTimeExecute(Sender: TObject);
var
  frmSetLoggerTime: TfrmSetLoggerTime;
  var
  RecAffected, tmpOleVar:OleVariant;
  cmdObj: _Command;
  ParDataLoggerID, ParUdapteTime :_Parameter;
begin
  tmpOleVar:=OleCtrls.EmptyParam;
  frmSetLoggerTime := TfrmSetLoggerTime.Create(self);
  try
    frmSetLoggerTime.dtpToDate.DateTime := now;
    if frmSetLoggerTime.ShowModal = mrOK then
    begin
      cmdObj := CoCommand.Create;
      cmdObj.Set_ActiveConnection(DBRemoteModule.SLogConnection.ConnectionObject);
      cmdObj.CommandType := adCmdStoredProc;
      cmdObj.CommandText := 'UpdateRebelDateTime';
      ParUdapteTime := cmdObj.CreateParameter('@UdapteTime', adDate,     adParamInput, 3, frmSetLoggerTime.dtpToDate.DateTime);
      cmdObj.Parameters.Append(ParUdapteTime);
      ParDataLoggerID := cmdObj.CreateParameter('@DataLoggerID', adInteger,     adParamInput, 4, QueryLogger.FieldByName('DataLoggerID').AsInteger);
      cmdObj.Parameters.Append(ParDataLoggerID);
      cmdObj.Execute(RecAffected, tmpOleVar, 0);

    end;
  finally
    frmSetLoggerTime.free;
  end;

end;

这是存储过程:

ALTER PROCEDURE [dbo].[UpdateRebelDateTime]  @UpdateDateTime datetime,      @DataLoggerID int
AS 
SET NOCOUNT ON
  UPDATE tblDataLoggers SET UpdateDateTime = @UpdateDateTime,     UpdateDateTimeDelay = GETUTCDATE()  
  WHERE  DataLoggerID = @DataLoggerID

1 个答案:

答案 0 :(得分:0)

您正在使用其他参数名称:@UdapteTime

您的代码:

 ParUdapteTime := cmdObj.CreateParameter('@UdapteTime', adDate, adParamInput, 3, frmSetLoggerTime.dtpToDate.DateTime);

它预计:

@UpdateDateTime