![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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 |
#2
|
|||
|
|||
Dejo MySQL
Definitivamente dejo el desarrollo de la aplicacion que estaba realizando con mySQL. Me ha sido imposible ejecutar transacciones. Me paso a FireBird.
|
#3
|
||||
|
||||
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 |
#4
|
|||
|
|||
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 |
#5
|
|||
|
|||
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 |
#6
|
||||
|
||||
Cita:
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 |
![]() |
|
|
![]() |
|