FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Controlar Commit y Rollback
Hola compañeros del club:
Estoy realizando mantenciones a un sistema hecho en Delphi 4 y SQL Server 2000, y necesito cambiar algo de caracter importantísimo. En primer lugar las transacciones están aisladas, ¿que quiero decir con esto?, pues que cada procedimiento almacenado de la base de datos contiene commit y rollback, siendo esto último no un problema para los mantenedores simples, por ejemplos productos, clientes, bodegas, etc... Mi problema radica es que los modulos de ventas por ejemplo el de factura, al momento de grabar llama a varios SP (Ingresa Factura, Detalle Factura, Cta Corriente del cliente, Actualiza Stock, Etc....) lo cual al momento de producirse un fallo en el segundo u tercero.... SP me deja incosistencias en la BD ya que se produce un commit en cada procedimiento. Sin lugar a dudas en estos casos lo mejor es controlarlo desde el programa todo lo referente a los commit y rollback, pero aquí yace mi gran duda... Creo que con el código se entenderá un poco mejor:
Supongamos IngresarGuia, IngresarCorrelativo son procedimientos delphi que a la vez llaman a procedimientos de SQL Server que contiene commit, mi idea es quitar los commit y en caso de error capturar el código error devuelto por la BD y este asignarlo a una variable pública del formulario para controlar el error, pero no se me ocurre muy bien como implementarlo, según ustedes ¿qué opción me recomendarían ? Esperando que toda esta parafernalía se entienda Hasta Luego -
__________________
No todo es como parece ser... |
#2
|
||||
|
||||
|
#3
|
||||
|
||||
Veo un defecto en el código de kalimero y es que se "traga" la excepción, por lo que aún cuando se ha realizado correctamente el rollback, pueden haber fallos posteriores debido a esto:
yo lo dejaría como: Hasta luego.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate Última edición por jachguate fecha: 06-09-2006 a las 16:00:59. |
#4
|
||||
|
||||
Efectivamente Jachguate. No lo he dicho porque doy por supuesto que el interesado ya tenia claro este tema. Me he centrado en el objetivo de la pregunta era saber donde se ponen la llamadas a "begintrans" y "commit".
De todas formas el codigo correcto es el que tu has apuntado. Saludos |
#5
|
||||
|
||||
Cita:
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#6
|
||||
|
||||
Cita:
¿Realmente es poner todos los procedimientos delphi que tengo mas arriba en uno solo? Con referente a tu último comentario, creo que no esta acorde a un forista que tiene más de 600 mensajes y que es motivo claro de un hecho de aprender y no salir del apuro... Hasta Luego y gracias...
__________________
No todo es como parece ser... |
#7
|
||||
|
||||
Cita:
Cita:
Saludos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
#8
|
||||
|
||||
Cita:
Hasta Luego -
__________________
No todo es como parece ser... |
#9
|
||||
|
||||
tarde
Este problema podria tratarse con procedimientos anidados.
por otro lado puedes captutar el error en el mismo procedimiento if @@erro<> o goto un_error: un_error: rolback return(1); aqui ya con la devolucion 1 puedes gestionar este erro tarde la respuesta. jajaj y ademas no se si hubiese servido en el contextp de esta necesidad |
#10
|
||||
|
||||
Cita:
Francamente nunca he sido de la idea de hacer un rollback dentro de un procedimiento dentro de la propia base de datos.. no solo no es soportado por todos los motores, sino deja poca oportunidad para la re-utilización de código, ya que es indefinido (o al menos varía de motor a motor) cuál será el comportamiento con posibles próximas operaciones que uno podría suponer deben ir en el contexto de la misma transacción. En mi opinión, el control de las transacciones debe ser siempre explícito y desde fuera de los procedimientos y funciones almacenados. Mis 2 centavos.
__________________
Juan Antonio Castillo Hernández (jachguate) Guía de Estilo | Etiqueta CODE | Búsca antes de preguntar | blog de jachguate |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
StartTransaction - Commit y Rollback | Patricio | Conexión con bases de datos | 0 | 07-12-2005 13:56:27 |
RollBack con más de una transacción | kikodelphi | MS SQL Server | 2 | 12-10-2005 20:24:25 |
Ejecutar un rollback | micayael | PHP | 4 | 22-09-2005 15:36:54 |
utilizar rollback, commit en bases sql,postgres,access | detybel | SQL | 2 | 23-06-2005 17:14:11 |
Uso adecuado de Rollback | rochi | Firebird e Interbase | 4 | 20-11-2004 20:10:55 |
|