【问题标题】:How can I get the number of deleted records?如何获取已删除记录的数量?
【发布时间】:2017-03-07 12:49:23
【问题描述】:

我试过了:

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 的行中,它会引发错误:

对象关闭时不允许操作

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

【问题讨论】:

    标签: delphi ado delphi-xe4


    【解决方案1】:

    使用具有RecordsEffected 输出参数的TADOCommand.Execute() 的重载版本:

    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)调用它,它会显示:“参数对象定义不正确。提供的信息不正确或不完整。”在方法调用之前我应该​​如何处理 OLEVariant?
    • 你用未初始化的 OLEVariant 来称呼它是什么意思? EmptyParam 是 System.Variants 单元中已经存在的函数,表示一个未使用的可选参数。
    • 我刚刚“创建”了一个 OLEVariant 类型的局部变量。
    • 谢谢雷米!它适用于 EmptyParam 的调用。
    猜你喜欢
    • 2020-11-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多