Delphi 如何获取已删除记录的数量?

Delphi 如何获取已删除记录的数量?,delphi,ado,delphi-xe4,Delphi,Ado,Delphi Xe4,我试过这个: function TMyClass.removeRecords(...) : integer; var aC : TADOCommand; aRS : _RecordSet; begin aC := createADOCommand; try aC.Connection := fConnection; aC.commandText := getDeleteModelSQLCommand( ... ); aRS := aC.Execute;

我试过这个:

function TMyClass.removeRecords(...) : integer;
var
  aC : TADOCommand;
  aRS : _RecordSet;
begin
  aC := createADOCommand;
  try
    aC.Connection := fConnection;
    aC.commandText := getDeleteModelSQLCommand( ... );
    aRS := aC.Execute;
    {$ifdef debug_AlwaysOne}
      result := 1;
    {$else}
      result := aRS.RecordCount;
    {$endif}
  finally
    releaseADOCommand( aC );
  end;
end;
它在定义了调试条件的情况下正常运行

但是,在读取RecordCount的行上,它会引发一个错误:

关闭对象时不允许执行操作


有没有办法获得删除记录的数量?我知道我可以在删除之前执行聚合查询。但是,我可以在没有另一个SQL命令调用的情况下执行此操作吗?

使用具有RecordsEffected输出参数的重载版本:

function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _Recordset; overload;
例如:

function TMyClass.removeRecords(...) : integer;
var
  aC : TADOCommand;
begin
  aC := createADOCommand;
  try
    aC.Connection := fConnection;
    aC.commandText := getDeleteModelSQLCommand( ... );
    {$ifdef debug_AlwaysOne}
    aC.Execute;
    Result := 1;
    {$else}
    aC.Execute(Result, EmptyParam);
    {$endif}
  finally
    releaseADOCommand( aC );
  end;
end;

使用具有RecordsEffected输出参数的重载版本:

function Execute(var RecordsAffected: Integer; const Parameters: OleVariant): _Recordset; overload;
例如:

function TMyClass.removeRecords(...) : integer;
var
  aC : TADOCommand;
begin
  aC := createADOCommand;
  try
    aC.Connection := fConnection;
    aC.commandText := getDeleteModelSQLCommand( ... );
    {$ifdef debug_AlwaysOne}
    aC.Execute;
    Result := 1;
    {$else}
    aC.Execute(Result, EmptyParam);
    {$endif}
  finally
    releaseADOCommand( aC );
  end;
end;

如果我用一个未初始化的OLEVariant调用它,您将它命名为EmptyParam,它会说:Parameter对象定义不正确。提供的信息不正确或不完整。在方法调用之前,我应该如何处理OLEVariant?用未实现的OLEVariant调用它是什么意思?EmptyParam是System.Variants单元中已经存在的函数,它表示一个未使用的可选参数。我刚刚创建了一个OLEVariant类型的局部变量。谢谢你,雷米!它与EmptyParam的调用配合得很好。如果我使用未初始化的OLEVariant调用它,您将其命名为EmptyParam,它会说:Parameter对象定义不正确。提供的信息不正确或不完整。在方法调用之前,我应该如何处理OLEVariant?用未实现的OLEVariant调用它是什么意思?EmptyParam是System.Variants单元中已经存在的函数,它表示一个未使用的可选参数。我刚刚创建了一个OLEVariant类型的局部变量。谢谢你,雷米!它在调用EmptyParam时工作良好。