2017-03-07 5 views
1

私はこれを試してみました:削除されたレコードの数はどのように取得できますか?

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コマンド呼び出しなしでこれを行うことはできますか?

答えて

4

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; 
+0

私は初期化されていないOLEVariant(あなたがEmptyParamのためにそれを命名)でそれを呼び出すと、それは"パラメータオブジェクトが不適切に定義されています。不正確または不完全な情報が提供されました。メソッド呼び出しの前にOLEVariantをどうすればいいですか? –

+2

あなたはそれがuninitailized OLEVariantでそれを呼び出すという意味ですか? EmptyParamはSystem.Variantsユニットに既に存在する関数で、未使用のオプションパラメータを表します。 – Fero

+0

私はちょうどタイプOLEVariantのローカル変数を "作成"しました。 –

関連する問題