2017-03-29 5 views
0

d'abord je tiens à souligner que ce code fonctionne dans 99% des cas, mais de temps en temps les clients se plaignent de recevoir cette erreur. J'ai le code ci-dessous pour passer 2 paramètres à une procédure stockée. frmSetLoggerTime est un formulaire avec un datetimepicker (dtpToDate). Quelqu'un est-il déjà tombé sur ce problème? J'utilise Borland Delphi 7 avec SQL Server 2008.Parfois, je reçois l'erreur suivante: Procédure ou fonction attend paramètre qui n'a pas été fourni

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; 

Voici la procédure stockée:

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

Répondre

0

Vous utilisez un autre nom de paramètre: @UdapteTime

Votre code:

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

Et il attend:

@UpdateDateTime 
+0

Si tel est le cas pourquoi il fonctionne la plupart du temps? – ppetkov