Transacciones en visual foxpro 7.0 y sqlserver 2005

73 views
Skip to first unread message

Pedro Antonio Angarita Rojas

unread,
Oct 8, 2014, 10:05:32 PM10/8/14
to publice...@googlegroups.com
Buenas noches,

estamos dando soporte a un sistema ERP hecho en vfp 7.0 y con bd sql server 2005.

actualmente se presentan muchos inconvenientes al guardar la información por concurrencia de usuarios y errores del sistema, lo que ocasiona que queden encabezados sin detalle mezcla de información etc etc.

para evitar esto, decidimos implementar un esquema de transacciones manuales a través de la propiedad sqlsetprop y los comandos sqlcommit y sql rollback, para garantizar integridad en la información. Por ejemplo en la opción GUARDAR PEDIDO, se modifican alrededor de 6 a 8 tablas, entonces durante ese proceso las transacciones se pasan a forma manual sqlsetprop = 2 (manual) y cuando teermina de ejecutar el crud sobre la última tabla, se efectúa el sqlcommit ó si hubo algún error, se ejecuta sql rollback, finalmente se ejecuta sqlsetprop = 1 (automática).

Funciona bien con uno o dos usuarios, pero a partir de ahí, en ocasiones se genera el error adjunto de interbloqueo (interbloqueo.png). Al parecer realiza toda la tarea, pero no se si se quede algo sin ejecutar, por otra parte ese error es bien molesto al usuario final y causa demasiada confusión.

un dato importante es que existe una rutina para controlar errores ON ERROR MiError, pero no se porqué los errores de BD no llegan a esa rutina, ni siquiera cuando salen errores del tipo can not acces the selected table. se revisó donde más se llamaba on error y no se encontró, además otros tipos de errores si los captura la rutina.

por favor me pueden indicar como reducir o quitar el tipo de error adjunto (interbloqueo) usando transacciones manuales? no se si la opción set reprocess en automatic evite ue se genere este error, aunque viene directamente de sql server.

cualquier ayuda es muy  bien recibida

de nuevo muchas gracias, salu2
interblouqeo.png

Ricardo Peña

unread,
Oct 8, 2014, 10:43:47 PM10/8/14
to GRUPO-VFP GRUPO-VFP
Estimado colega:
 
No creo que te quede otra salida que generar todos los insert en
una sola transacción de sql.  Para ello me parece que lo más acon-
sejable es hacer un store procedure en el sql.
 
Por otro lado las rutina ON ERROR sólo son para vfp.  Los errores
del sql, los debes tratar considerando el valor que retorna el
sqlexec.  Lo mismo pasa con el set reprocess; es sólo para vfp. 
 
En vfp podrías usar:
 
sqlerr=sqlexec(MiHandler,"EXEC dbo.inserta_pedido ?par1, ?par2,.....,?parn")
 
y en sql :
 
create procedure dbo.inserta_pedido @par1 xxxx, @par2 xxxx, ......., @parn xxxx
 
as
 
set nocount on
 
SET TRANSACTION ISOLATION LEVEL REPEATABLE READ
BEGIN TRAN
 
INSERT INTO MiTabla1 VALUES (@par1,........)
INSERT INTO MiTabla2 VALUES (@par2,........)
INSERT INTO MiTabla3 VALUES (@par3,........)
 
COMMIT TRAN
SET TRANSACTION ISOLATION LEVEL READ COMMITTED
GO
 
Espero haber sido de ayuda.

Ricardo Luis Peña
Analista de Sistemas
BA - Argentina
011-15-4440-7378
 

Date: Wed, 8 Oct 2014 19:05:32 -0700
From: angaritape...@gmail.com
To: publice...@googlegroups.com
Subject: [vfp] Transacciones en visual foxpro 7.0 y sqlserver 2005
Reply all
Reply to author
Forward
0 new messages