Visual Basic - *** BEGINTRANS ***

Life is soft - evento anual de software empresarial
 
Vista:

*** BEGINTRANS ***

Publicado por CvargasK (13 intervenciones) el 11/09/2006 17:13:11
Hola Foro,

Les agradezco de antemano por su ayuda...
Tengo una equipo PIV con Windows XP SP2, Visual Basic 6.0 SP5 y ADO 2.5
Estoy tratando de utilizar BEGINTRANS para MySQL 5.0, tengo el siguiente codigo para probar y ver si realiza el Rollback, pero no lo ejecuta...

cnConnection.Execute "SET AUTOCOMMIT=0;"
cnConnection.Execute "START TRANSACTION;"
'Aqui grabo los campos en la tabla
Update
cnConnection.Execute "COMMIT;"
cnConnection.Execute "ROLLBACK;"

Cuando verifico la tabla, los datos estan grabados, hay algo que este haciendo mal?

Espero me puedan ayudar y nuevamente les agradezco

Saludos,

CvargasK
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:*** BEGINTRANS ***

Publicado por Esteban (1144 intervenciones) el 11/09/2006 17:24:18
Formato de tabla en MySQL?

Debe ser InnoDB, porque sí me ha funcionado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

Perdón por no leer

Publicado por Esteban (1144 intervenciones) el 11/09/2006 17:25:36
Pido disculpas, pero ADO puede manejar su propio begin transaction, commit y rollback, así te puedes evitar la ejecución no nativa de ADO
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: *** BEGINTRANS ***

Publicado por CvargasK (13 intervenciones) el 11/09/2006 22:23:15
Hola Foro,

Cuando dices que ADO puede manejar su propio begin trans, te refieres a que puedo utililzar lo siguiente:

cnConnection.BeginTrans
Recordset.AddNew
...
Recordset.Update
cnConnection.CommitTrans
cnConnection.RollbackTrans

Porque lo he hecho y me muestra el siguiente mensaje de error:

NO HAY NINGUNA TRANSACCION ACTIVA

Gracias nuevamente,

Saludos,

CvargasK.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE: *** BEGINTRANS ***

Publicado por Pablo (31 intervenciones) el 18/09/2006 19:02:31
El código que tienes es correcto, pero creo que el tema está en el sentido de la ejecución de la transacción. Si aparece el "commit" antes del "rollback", ejecutará la operación. SI no ha tenido problemas, la información se habrá grabado en la tabla y finaliza la transacción, y el "rollback" ya no te vale para NADA. Por eso te dice que no hay transacción pendiente.
Salvo que esté equivocado, NO puedes deshacer con un "rollback" una transacción que haya finalizado correctamente.

La idea es situar el "rollback" en una parte del procedimiento que salte el código si ha habido algún error durante el proceso "commit", entonces, éste proceso no se ha llegado a ejecutar completamente y se puede lanzar el "rollback" para que deshaga las operaciones realizadas hasta ese momento. P.e:

Sub Nombre
On Error goto ErrTrans

cn.BeginTrans

...operaciones de grabación, etc..

cn.CommitTrans

......cierres de tablas (si es el caso), etc...

exit Sub

ErrTrans:
cn.RollBackTrans
End Sub
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar