In Delphi, come si può provare, finalmente, e catturare insieme? A Java/C# equivalenti sarebbe simile:C#/Java "Try/Finally/Catch" costrutto equivalente in Delphi
try {
// Open DB connection, start transaction
} catch (Exception e) {
// Roll back DB transaction
} finally {
// Close DB connection, commit transaction
}
Se provate questo a Delfi, è possibile utilizzare try/finally o provare/eccezione; ma mai tutti e tre insieme. Vorrei codice come il seguente (che non compilare):
try
// Open DB connection, start transaction
except on e: Exception do
begin
// Roll back transaction
end
finally // Compiler error: expected "END" not "finally"
begin
// Commit transaction
end
Poiché 'finally' e' except' sono semanticamente totalmente diversi, in Delphi non possono essere nella stessa istruzione. Basta guardare le sorgenti RTL/VCL dove sono usati 'finally' e' except' (e il loro rapporto). Vedrai a malapena i posti dove sono vicini. –
Non mettere "transazione di commit" in un blocco 'finally'. Se si verifica un'eccezione, non si desidera eseguire alcun commit. In particolare, non vuoi provare a eseguire il commit di una transazione che hai già eseguito il rollback nel precedente blocco 'except'. Commit dovrebbe essere l'azione finale nella sezione 'try'. –