Ver Mensaje Individual
  #13  
Antiguo 01-03-2017
GOG GOG is offline
Miembro
 
Registrado: abr 2008
Posts: 17
Reputación: 0
GOG Va por buen camino
Cita:
Empezado por AgustinOrtu Ver Mensaje


La forma correcta de hacerlo es esta, y es universal para cualquier componente de acceso a datos (puede haber errores de sintaxis porque estoy escribiendo de memoria)

Código Delphi [-]
  if not ADOConnection.BeginTransaction then
    // politica ante errores: reintentar, lanzar excepcion, mandar a una cola y procesar mas tarde

  try
    // editar o insertar campos
    ADOConnection.CommitTransaction;
  except
    ADOConnection.RollbackTransaction;
    raise;
  end;


Es importantisimo que la sentencia que inicia la transaccion este fuera del bloque try, ya que si se pone dentro del try-except y la transaccion no puede iniciar, y se produce una excepcion por cualquier motivo, el flujo pasa al bloque except y ejecutariamos un Rollback cuando no hay ninguna transaccion

Tambien el Commit suele ser la ultima sentencia del bloque try, aunque puede haber cosas despues de esto (como escribir en un log). Obviamente tiene que estar despues de realizar todas las inserciones, modificaciones, borrados, o ejecucion de cualquier SQL

Y por ultimo el bloque except captura todas las excepciones, realiza el rollback correspondiente (ya que si entramos dentro del try se asegura que estamos en una transaccion) y luego vuelve a elevar la excepcion (no la oculta), para que se propague

Gracias Bitbow, creo que con esto que decía Agustín funciona bien... Saludos
Responder Con Cita