![]() |
![]() |
![]() |
![]() |
![]() |
FTP | ![]() |
![]() |
CCD | ![]() |
![]() |
Buscar | ![]() |
![]() |
Trucos | ![]() |
![]() |
Trabajo | ![]() |
![]() |
Foros | ![]() |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
![]() |
|
Herramientas | Buscar en Tema | Desplegado |
|
#1
|
||||
|
||||
Evitar el KeyViolation de una Tabla
Buenas Amigos del foro ....
estoy terminando mi sistema de facturacion y tengo el siguiente problema que al facturar en dos cajas al mismo tiempo me da keyviolation la tabla de facturas , porque no tengo una manera de hacer que el programa al encontar una clave duplicada en este caso el numero de factura ,este le sume uno mas , es decir al facturar en dos cajas al mismo tiempo; debido a la restriccion de la tabla que no permita claves duplicadas que es algo muy bueno en este caso , no me de el keyviolation, tengo una tabla de cifra de control el cual lleva el ultimo numero de documento para partir desde alli y cada vez que se crea una factura este se actuliza con el ultimo numero de documento para partir de alli el siguiente numero de factura y haci sucesivamente , trabajo con una base de datos sql server 2000 , espero me ayuden ... :P |
#2
|
||||
|
||||
Nosotros lo que hacemos es, en el momento de insertar la nueva factura, bloquear la tabla de contadores, obtener uno e incrementar, luego insertar la factura y desbloquear. Eso debe estar dentro de una transacción.
Revisa los niveles de aislamiento porque tendrás que cambiar el ISOLATION LEVEL para que nadie lea la tabla de contadores mientras haces la operación anterior y obtenga valores incorrectos.
__________________
Germán Estévez => Web/Blog Guía de estilo, Guía alternativa Utiliza TAG's en tus mensajes. Contactar con el Clubdelphi ![]() P.D: Más tiempo dedicado a la pregunta=Mejores respuestas. |
#3
|
||||
|
||||
mm entiendo Neftali , no habia pensado en eso ,,,y... mas omenos como los hago?
![]() |
#4
|
||||
|
||||
Evitar el Key violation
Para grabar transacciones de este tipo uso procedimientos almacenados en SQL Server, envio los datos de la factura a grabar y el procedimiento almacenado va a la tabla de contadores obtiene el siguiente, graba los datos y actualiza el archivo de contadores. Debido a la velocidad del sql server y la ejecucion en proc almacenados, hasta ahora no he tenido problemas de concurrencia.
Si quieres ejemplo del proc almacenado enviame un mensaje privado. Saludos. |
#5
|
||||
|
||||
estuve viendo el Isolation level aparentemente es que necesito pero no se por copleto como trabaja , loque deberia hacer el sistema es que mientras esta en uso la tabla de control, espere a que la otra transaccion termine... pero no ne como hacerlo...
|
![]() |
|
|
![]() |
||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Ordenar tabla numericamente (evitar 1,10,2,3) | Forest | Tablas planas | 4 | 08-08-2007 02:05:55 |
Evitar Triggers Al Vaciar Tabla [Firebird] | LuCkY_007 | Firebird e Interbase | 8 | 21-03-2007 20:22:20 |
Evitar los timers | zugazua2001 | Varios | 5 | 17-06-2005 11:11:55 |
Evitar KeyViolation | Ing Harry | Conexión con bases de datos | 10 | 11-06-2005 00:10:01 |
Evitar duplicados | hectorin | Conexión con bases de datos | 2 | 29-10-2004 16:37:25 |
![]() |
|