FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
||||
|
||||
Manejo de transacciones en SQL server
Hola Amigos y compañeros del foro tengo el siguiente problema y me aboco a ustedes para ver si es posible resolverlo:
-Tengo un sistema de facturación hecho en delphi 7 con una base de datos en SQL Server, instale mi sistema en aproximadamente 13 PCs, de las cuales solo 5 son de los facturadores ,el problema que tengo es que el sistema se me cuelga al momento de grabar una factura ,lo que es extraño porq cuando empezaron a usar el sistema , este no se colgaba, creo que el problema viene por el manejo de las transacciones, para el evento de grabar utilizo :
el momento en el que se cuelga es normalmente cuando guardan al mismo tiempo una factura, el if not (form1.Database1.InTransaction) then , probablemente este generando el problema ya que si una maquina esta en proceso de grabado las demás tienen que esperar a que esta termine ,a esto súmenle una maquina no muy rápida que digamos , luego otras transacciones pendientes, por la de los facturadores ,se genera una lentitud extrema , básicamente lo que quiero es que el programa no dependa de que si otra maquina esta es transacción, esta pueda grabar en la base sin ningún problema, ya que si se cuelga en el momento de grabar la factura se empiezan a colgar una a una hasta que la primera que empezó a grabar termine el proceso. ..... ¿Cual sera la mejor forma de guardar la informacion? espero me ayuden a encontrar una solución...
__________________
all your base are belong to us |
#2
|
|||
|
|||
A mi hace tiempo me dieron un consejo que me ha resultado muy bueno, las transacciones son solo al momento de guardar datos, con esto quiero decir que para que iniciar una transaccion por ejemplo al inicio de la pantalla, si lo unico que haces es bloquear todo, solo usa la transaccion al momento en que empiezes a guardar o modificar datos y cuando termines finalizala
|
#3
|
||||
|
||||
lo mejor es que coloques las transacciones en Sql server.
Pues almacenar la información de facturación en un Xml, enviarla al servidor convertirla a un recorset y guardar los datos en un bloque transaccional con su respectivo manejo de errores. Colocar las transacciones en los clientes es una mala práctica.
__________________
Conoce mi blog http://www.edgartec.com |
#4
|
||||
|
||||
Cita:
__________________
all your base are belong to us |
#5
|
||||
|
||||
Pues por lo pronto yo veo un error bastante común (al menos lo he visto es muchos programas).
En tu código al ocurrir una excepción, muestras el mensaje de error y después haces el rollback. Ahora imagina al clásico usuario al cuál le dan ñañaras las computadoas: - "ok, hoy si voy a trabajar.. vamos a ver.. crear factura.. capturar... ¡CHANGOS!, esta mugre ya marcó un error...." Se levanta de su silla, se va a preparar un café, platica con la secretaría, luego va con el guardia a platicar de futbol y después de todo eso va con el de sistemas a reportarle el error. Durante todo ese tiempo, como nunca le dio aceptar al error, la transacción siguió activa, bloqueando a todos los demás usuarios. Solución: Ejecuta el RollBack primero y después muestra el error. Como sugerencia, trataría de hacer las excepciones más específicas y no utilizar el E:Exception, si no la clase del error que estoy esperando, EDBEngine por ejemplo. Y cambiaría el mensaje por: 'Ocurrió un error al intentar guardar. ' +#13+E.ClassName+' - '+E.Message Pero es cosa personal, eso de decir "posteo" no me gusta a mi para nada...
__________________
Última edición por ContraVeneno fecha: 12-08-2008 a las 23:17:49. |
#6
|
||||
|
||||
Cita:
__________________
all your base are belong to us |
#7
|
||||
|
||||
Cita:
Excelente ejemplo amigo contra, Esa es la gran razón por la que es una malisima práctica colocar las transacciones en los clientes. a eso agregale que el programa se bloquea antes de lanzar el rollback. las transacciones deben ser controladas por el manejador de bd
__________________
Conoce mi blog http://www.edgartec.com |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Manejo de transacciones | StartKill | MS SQL Server | 7 | 23-09-2008 21:46:53 |
error en manejo de transacciones | JODELSA | Varios | 1 | 11-07-2005 16:50:56 |
Como manejo varias Transacciones a la vez con Access | marcoev | Tablas planas | 2 | 25-04-2005 21:44:28 |
Manejo de Transacciones | takeo | Conexión con bases de datos | 0 | 01-12-2004 05:29:53 |
Manejo de Transacciones | senpiterno | Conexión con bases de datos | 1 | 08-10-2004 15:05:34 |
|