Retroceder   Foros del Web > Programación para sitios web > Bases de Datos > SQL Server

Respuesta
 
Herramientas Desplegado
Antiguo 14-ene-2008, 16:18   #1 (permalink)
kaquijose ha deshabilitado el karma
 
Fecha de Ingreso: enero-2008
Mensajes: 7
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
kaquijose está desconectado   Responder Citando
Antiguo 14-ene-2008, 16:29   #2 (permalink)
Colaborador
iislas ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Mensajes: 1.391
Re: Problema de Integridad

Alfredo

¿Porque no dejas que la base de datos sea quien controle las transacciones?
iislas está desconectado   Responder Citando
Antiguo 14-ene-2008, 16:51   #3 (permalink)
kaquijose ha deshabilitado el karma
 
Fecha de Ingreso: enero-2008
Mensajes: 7
Re: Problema de Integridad

Perdón por la ignorancia, Como?
kaquijose está desconectado   Responder Citando
Antiguo 14-ene-2008, 18:31   #4 (permalink)
Colaborador
iislas ha deshabilitado el karma
 
Fecha de Ingreso: julio-2007
Mensajes: 1.391
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
iislas está desconectado   Responder Citando
Antiguo 15-ene-2008, 13:53   #5 (permalink)
Colaborador
Andres95 tiene algunos puntos positivos de karma
 
Avatar de Andres95
 
Fecha de Ingreso: diciembre-2004
Mensajes: 1.146
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...

Última edición por Andres95; 15-ene-2008 a las 14:45. Razón: ortografia
Andres95 está desconectado   Responder Citando
Respuesta

No hay votos aún.


Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code is Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado


La Zona horaria es GMT -6. Ahora son las 15:39.


Message Board Statistics

LinkBacks Enabled by vBSEO 3.1.0

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93