2017-03-07 6 views
1

J'ai essayé ceci:Comment puis-je obtenir le nombre d'enregistrements supprimés?

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; 

Il fonctionne correctement avec le debug_AlwaysOne conditionnelle définie.

Cependant, à la ligne qui lit le RecordCount, il déclenche une erreur:

Operation is not allowed when the object is closed

Est-il possible d'obtenir le nombre d'enregistrements supprimés? Je sais que je peux exécuter une requête agrégée avant la suppression. Mais puis-je le faire sans un autre appel de commande SQL?

Répondre

4

Utilisez la version surchargée de TADOCommand.Execute() qui a un paramètre de sortie RecordsEffected:

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

Par exemple:

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

Si je l'appelle avec un OleVariant initialisés (vous l'avez nommé pour EmptyParam), il dit: "L'objet du paramètre est mal défini, des informations incorrectes ou incomplètes ont été fournies." Que dois-je faire avec l'OLEVariant avant l'appel de méthode? –

+2

Que voulez-vous dire que vous l'appeliez avec un OLEVariant non-initialisé? EmptyParam est une fonction qui existe déjà dans l'unité System.Variants, qui représente un paramètre facultatif inutilisé. – Fero

+0

Je viens de "créer" une variable locale de type OLEVariant. –