首先我要强调的是,此代码在99%的时间内都有效,但每隔一段时间客户就会抱怨收到此错误。我有用于将2个参数传递给存储过程的波纹管代码。 frmSetLoggerTime是一个带有datetimepicker(dtpToDate)的表单。 有人遇到过这个问题吗?我正在使用Borland Delphi 7和SQL Server 2008。
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
答案 0 :(得分:0)
您正在使用其他参数名称:@UdapteTime
您的代码:
ParUdapteTime := cmdObj.CreateParameter('@UdapteTime', adDate, adParamInput, 3, frmSetLoggerTime.dtpToDate.DateTime);
它预计:
@UpdateDateTime