FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
|||
|
|||
Uso de TZQuery y TZUpdateSQL
Estimados.
Estoy comenzando con MySql 5.1 y Zeosdbo 6.6.4, con Delphi2005. Tengo MiQuery que hereda de TZQuery, con la propiedad CachedUpdates=True, le tengo asociada MiUpdQuery que hereda de TZUpdateSQL, con sus correspondientes metodos DeleteSql, InsertSQL y ModifySQL. En el botón "Grabar" tengo el siguiente código: MiQuery.Post; if MiQuery.UpdatesPending then MiQuery.ApplyUpdates; MiQuery.CommitUpdates; Pues bién, inserto y modifico correctamente, pero al salir de la aplicación y volver a entrar, los cambios se han perdido, no se ha guardado nada. ¿Que estoy haciendo mal?. Muchisimas gracias de antemano. |
#2
|
|||
|
|||
Me respondo a mi mismo.
Pues, resulta que el problema estaba en el componente de conexion, ya que la propiedad AutoCommit, estaba a false, la he puesto a True y ha funcionado, y parace que el CommitUpdates no hace falta, es decir el código del botón "Grabar" lo he dejado de la siguiente manera: MiQuery.Post; if MiQuery.UpdatesPending then MiQuery.ApplyUpdates; Ahora se me presenta la siguiente duda: Con el AutoCommit=True; en el componente de conexión, si actualizo varias tablas en un transacción y una de ellas falla, cuando haga Rollback, ¿Que pasa con las tablas ya actualidas en al misma transacción?. En cuanto pueda probar esto, os comento los resultados. |
#3
|
|||
|
|||
Pues no hace Rollback correctamente.
Tengo el siguiente código: Código:
if not DMConexionDB.ZConnection.InTransaction then DMConexionDB.ZConnection.StartTransaction; try Post; if TZQuery(Dataset).UpdatesPending then TZQuery(Dataset).ApplyUpdates; ProcedimientoConError; // Este procedimiento da un error forzado DMConexionDB.ZConnection.Commit; Result := True; except DMConexionDB.ZConnection.Rollback; Result := False; raise; end; // Try/Except ¿Que puede estar pasando?. |
#4
|
||||
|
||||
tal vez debes comensar con BEGIN
Cito lo que leí acerca de los RollBack:
"Los pasos para usar transacciones en MySQL son: * Iniciar una transacción con el uso de la sentencia BEGIN. * Actualizar, insertar o eliminar registros en la base de datos. * Si se quieren los cambios a la base de datos, completar la transacción con el uso de la sentencia COMMIT. Únicamente cuando se procesa un COMMIT los cambios hechos por las consultas serán permanentes. * Si sucede algún problema, podemos hacer uso de la sentencia ROLLBACK para cancelar los cambios que han sido realizados por las consultas que han sido ejecutadas hasta el momento." fuente: http://www.webtaller.com/construccio...es-mysql-2.php |
#5
|
|||
|
|||
Hola gasparsi.
Gracias por el consejo, pero la implementación del BEGIN es lo que intento hacer en el siguiente código: Código:
if not DMConexionDB.ZConnection.InTransaction then DMConexionDB.ZConnection.StartTransaction; // Esto sería el begin |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ayuda por favor: TZQuery + TClientDataSet = Error. | juanblack | Conexión con bases de datos | 2 | 23-09-2008 20:46:13 |
Problemas con pasar parametros con TZquery | Coco_jac | Varios | 2 | 18-04-2006 15:12:57 |
|