Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Transacciones - MySQL (https://www.clubdelphi.com/foros/showthread.php?t=21377)

motrildelphi 15-05-2005 20:17:34

Transacciones - MySQL
 
Hola a todos. Tengo problemas a la hora de usar transacciones con mysql. Estoy usando los componentes DBX y mi problema es que una vez he realizado el applyupdate sobre cualquier clientdataset ya no puedo realizar un rollback, los cambios son permanentes. Es como si no hiciera ninguna transaccion. El caso es que no da error ni cuando comienzo la transaccion ni cuando la cancelo.

Alquien sabe como solucionarlo? gracias

motrildelphi 17-05-2005 23:05:57

Dejo MySQL
 
Definitivamente dejo el desarrollo de la aplicacion que estaba realizando con mySQL. Me ha sido imposible ejecutar transacciones. Me paso a FireBird.

roman 18-05-2005 01:27:00

Claro que puedes pasarte a Firebird y quizá te resulte mucho mejor pero no veo qué problema hay con

start transaction
commit
rollback

Me han funcionado sin ningún problema; en tablas InoDb, claro está ya que no hay transacciones en tablas MyIsam y no con componentes dbexpress.

// Saludos

Epachsoft 18-05-2005 07:28:52

Hola,
Mencionaste TClientDataset, y applyupdate, entonces asumo que estas usando DataSnap.

Una recomendación de Borland es no incluir definicion de transacciones dentro de un TClientDataset simple o maestro-detalle ya que implicitamente DataSnap crea una transaccion para cada operacion que realiza.

Puede ser que tal vez no estas usando los TClientDatasets como se tiene supuesto. Para hacer cambios en tu dataset usas Post, si en algun momento quieres retroceder algun cambio, usas un Cancel, si realizas multiples Posts y quieres cancelar los cambios que has hecho, usas un CancelUpdates.

Una vez que estas satisfecho con todos los cambios hechos, usas un ApplyUpdate. Una vez ejecutado el ApplyUpdate, no hay vuelta atras. :)

Si tu diseño implica crear una transaccion a nivel de sql, puedes crea un stored procedure que realice toda la actualizacion dentro un commit.

Bueno, son solo sugerencias, suerte con eso.


att.
Esteban Pacheco
http://estebanp.blogspot.com

motrildelphi 18-05-2005 09:31:06

T explico el caso del uso de transacciones:

Creo una nueva obra la cual puede contener ditintas subcuadros de obra. Entonces al principio del procreso creo una transaccion, pq si falla en algun momento la operacion, o decido cancelar la creacion de la obra se anule todo. Pero el problema esta en que un subcuadro tiene un foreing key sobre una obra. Esta foreign key, es un valor autoincremental que me da mysql. Tiene que insertarse el valor en la tabla antes de poder crear un subcuadro.

No se si me he conseguido explicar, pero weno muchas gracias por las respuestas. Probé los driver para dbexpress de CoreLab y con ellos las transacciones si funcionaban. De echo he un pequeño ejemplo sobre firebird, primero un startTransaction, Insert, Post, ApplyUpdates y por ultimo RollBack, y no se producia la insercion. El problema radia en los drivers de borland para Mysql

roman 18-05-2005 16:37:49

Cita:

Empezado por motrildelphi
Probé los driver para dbexpress de CoreLab y con ellos las transacciones si funcionaban. De echo he un pequeño ejemplo sobre firebird, primero un startTransaction, Insert, Post, ApplyUpdates y por ultimo RollBack, y no se producia la insercion. El problema radia en los drivers de borland para Mysql

No me extraña. El interés de Borland por MySql es casi nulo y esos drivers nunca han sido buenos.

Me alegra que hayas solucionado esto porque- como creo que ahora te das cuenta -el fallo de unos componentes no es razón para abandonar MySql.

// Saludos


La franja horaria es GMT +2. Ahora son las 05:57:15.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi