Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   OOP (https://www.clubdelphi.com/foros/forumdisplay.php?f=5)
-   -   Evitar el KeyViolation de una Tabla (https://www.clubdelphi.com/foros/showthread.php?t=52438)

look 21-01-2008 17:50:15

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

Neftali [Germán.Estévez] 21-01-2008 18:36:20

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.

look 21-01-2008 19:02:58

mm entiendo Neftali , no habia pensado en eso ,,,y... mas omenos como los hago?:p...

jcarteagaf 21-01-2008 19:43:55

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.

look 21-01-2008 23:30:47

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...


La franja horaria es GMT +2. Ahora son las 13:40:35.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi