Problemas con Consecutivos
Hola,
Estoy utilizando Delphi 6 con Oracle . Tengo el siguiente problema tengo una aplicación que me genera numero de consecutivos para unos pedidos y esto lo usan varios usuarios a la vez. Se me esta presentando el error de que si varios usuario están trabajando al mismo tiempo les esta mostrando el mismo numero de consecutivo. Así es como obtengo y actualizo el consecutivo. UPDATE tabla SET consecutivo = select consecutivo +1 from tabla where .. Podrían de favor darme una idea como solucionar esto. Gracias. |
¿Haces commit al finalizar la actualización del campo?
Un saludo |
El problema es que si varios usuarios leen al mismo tiempo de forma concurrente, puede ser que obtengan el mismo valor. Para evitarlo puedes utilizar transacciones, de forma que el usuario que está accediendo bloquee momentáneamente el acceso al resto.
Revisa los diferentes "Isolation Levels" disponibles en Oracle, para decidir cual utilizar, de forma que se bloqueen las lecturas. |
umm por que no pones el campo como llave y que no permita duplicados, entonces cuando el usuario quiera insertar ese registro generaria una excepcion, la capturas y le pides al usuario recalcular el numero, solucion rapida o al menos creo que te sacaria del apuro
|
Cita:
|
Hola, este tema se trato acá http://www.clubdelphi.com/foros/showthread.php?t=65817
Espero te sirva. Saludos. |
primero que nada gracias a todos por responder.
:( pero aun sigo con el problema, se me sigue mostrando el mismo numero de consecutivos a mas de un usuario. cuando se trabaja al mismo tiempo. al proceso del obtener consecutivo ya le indice la transacción utilice ISOLATION LEVEL, pero no lo e podido solucionar. |
Debes crear una transacción que uincluya la consulta y la actualización del valor y asegurarte (vía ISOLATION LEVEL) de que nadie lee valores mientras otro proceso está en la transacción.
|
Muchas gracias, problema solucionado.
revise la transacción y colocación de ISOLATION LEVEL y con eso lo solucione. Gracias por el apoyo. :D |
de todos modos el esquema que ocupas (consecutivo + 1) es bastante arcaico, la mayor parte de los motores incluyen campos autoincrementados que evitan tener que hacer trabajo adicional para este tipo de casos ya que generan un número único inclusive por cada conexión.
|
La franja horaria es GMT +2. Ahora son las 05:59:11. |
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