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

问题描述:

我尝试这样做:如何获取已删除记录的数量?

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; 

它正确地定义debug_AlwaysOne条件运行。

然而,在那读RecordCount行,它提出了一个错误:

Operation is not allowed when the object is closed

有没有什么办法让删除记录的数目?我知道我可以在删除之前执行一个聚合查询。但是我可以在没有其他SQL命令调用的情况下执

使用重载版本的TADOCommand.Execute()具有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; 
+0

如果我未初始化的OLEVariant调用它(你把它命名为EmptyParam这样),它说:“参数对象定义不正确,提供的信息不正确或不完整。”在调用方法之前应该如何处理OLEVariant? –

+2

你是什么意思,你称它与一个uninitailized OLEVariant? EmptyParam是一个已经存在于System.Variants单元中的函数,它表示一个未使用的可选参数。 – Fero

+0

我只是“创建”了一个OLEVariant类型的局部变量。 –