Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » SQL Server »

Problema de Integridad

Estas en el tema de Problema de Integridad en el foro de SQL Server en Foros del Web. Pérdida de detalles de una transacción Visual Basic 6.0 Sql Server 2000. En el ingreso de datos utilizo transacciones, para las modificaciones de partidas contables ...
  #1 (permalink)  
Antiguo 14/01/2008, 17:18
 
Fecha de Ingreso: enero-2008
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Problema de Integridad

Pérdida de detalles de una transacción

Visual Basic 6.0
Sql Server 2000.

En el ingreso de datos utilizo transacciones, para las modificaciones de partidas contables también. Una partida contable lleva un registro en el encabezado y dos o mas registros en el detalle. Mi problema consiste que por ejemplo si se ingresan unas 500 partidas y se modifican unas 100 durante el mes en el procesos de modificación se pierde el detalle de por lo menos dos encabezados. Es decir funciona bien 98 veces y unicamente en dos ocaciones falla.


El proceso de modificación es el siguiente.
DESCRIPCIÓN
1. se guarda el encabezado y el detalle en tablas temporales.(encaAsientosNbk, detaAsientoNbk)
2. Se hacen las modificaciones en las tablas temporales, inclusive de los campos de las llave primaria
3. Se grava en la tabla en funciones (encaAsientosN y detaAsientoN) los registros ya modificados

CODIGO
/* previamente ya estan almacenados en una tabla auxiliar los registros del encabezado y detalle*/
reversa=1

beginTransaccion (idTransaccion)
Cr01 = " EXECUTE sp_AsignarSaldosConta Reversa
conDat.Execute (Cr01)
Co2.dbDelete ''Borrar el detalle de la partida
Co1.dbDelete 'Borra el encabeza de partida actual
'/*'INsertar las tuplas que se encuentran en tmpEncaAsientosN y tmpDetaAsientoN */
Call retornarCambio '/*Grava las partidas en la tabla temporal en la tabla en funciones*/
Reversa = 0 ' aplicar
Cr01 = " EXECUTE sp_AsignarSaldosConta 0
conDat.Execute (Cr01)
'/* 'call Verificar'Que no este la primera 'que tenga el detalle correspondiente */
Call Co2.GuardarCuentasFecha(tmpColuCuen, txtFech, tmpClave)'Algo que no tiene que ver
Call gravaEliminarPartida(False)
'/* Sin hay alguna sin detalle error y rollBack

If sinDetalle("encaAsientosN", "detaAsientoN", txtNPart, lblPart, lblPeri) Then GoTo ErrTbs
If msgTransaccion <> "" Then GoTo

endTransaccion (idTransaccion)

Por favor si alguien sabe la razón de mi problema o me pudiera apoyar le estaré muy agradecido. La verdad es urgente.

Alfredo
  #2 (permalink)  
Antiguo 14/01/2008, 17:29
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Re: Problema de Integridad

Alfredo

¿Porque no dejas que la base de datos sea quien controle las transacciones?
  #3 (permalink)  
Antiguo 14/01/2008, 17:51
 
Fecha de Ingreso: enero-2008
Mensajes: 7
Antigüedad: 17 años
Puntos: 0
Re: Problema de Integridad

Perdón por la ignorancia, Como?
  #4 (permalink)  
Antiguo 14/01/2008, 19:31
Avatar de iislas
Colaborador
 
Fecha de Ingreso: julio-2007
Ubicación: Mexico, D.F.
Mensajes: 6.482
Antigüedad: 17 años, 5 meses
Puntos: 180
Re: Problema de Integridad

Si, mira, VB es una herramienta de desarrollo, que desde mi punto de vista es BUENA (a secas), pero para el manejo de transacciones, no hay como un buen motor de base de datos y SQL SERVER, lo es.

Lee un poco sobre BEGIN TRAN, COMMIT TRAN, ROLLBACK TRAN
  #5 (permalink)  
Antiguo 15/01/2008, 14:53
Avatar de Andres95
Colaborador
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.802
Antigüedad: 20 años
Puntos: 38
Re: Problema de Integridad

que tal kaquijose, agrego la opinion que solicitaste.

Te comento que coincido con el compañero iislas.

El problema que te puede estar pasando es que al ejecutar las operaciones de insert, update y delete desde la aplicacion (aun cuando son sps) te esta generando bloqueos, que impiden que se terminen con exito los comandos, ya me ha tocado optimizar aplicaciones con los sintomas que describes.

Lo mejor seria manejar las transacciones desde SQL (con las sentencias que te comentaron), pero aun asi debes revizar tu proceso ya que tal vez no sea lo mejor el insertar en temporales, actualizar y luego de ahi pasarlos a las tablas operativas.

Adicionalmente debes checar la forma en que se realizan las consultas, aplicar "nolock" a los selects en los casos que sea posible (tambien es otro tema que debes investigar), verificar uso de indices, evitar (si es el caso) el uso de cursores, etc....

En fin, hay que tomarse un tiempo, porque creo que no será una tarea de solo arreglar una linea de codigo para que funcione correctamente siempre. Mas aun si tu sistema es accedido por multiples usuarios que actualizan dichas tablas al mismo tiempo.

Saludos!
__________________
La sencillez y naturalidad son el supremo y último fin de la cultura...
--
MCTS : SQL Server 2008, .NET Framework 3.5, ASP.NET Applications.

Última edición por Andres95; 15/01/2008 a las 15:45 Razón: ortografia
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 00:38.