Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   Problemas con Consecutivos (https://www.clubdelphi.com/foros/showthread.php?t=69781)

Yoana 09-09-2010 02:02:49

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.

ElKurgan 09-09-2010 07:29:18

¿Haces commit al finalizar la actualización del campo?

Un saludo

Neftali [Germán.Estévez] 09-09-2010 10:23:47

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.

microbiano 09-09-2010 21:55:59

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

Neftali [Germán.Estévez] 09-09-2010 23:59:29

Cita:

Empezado por microbiano (Mensaje 375911)
umm por que no pones el campo como llave y que no permita duplicados,

El problema es cuando lees el valor; Si dos programas se cuelan a leer al mismo tiempo (antes o después de actualizar), leerán el mismo número y tendrás problemas.

Cañones 10-09-2010 16:11:51

Hola, este tema se trato acá http://www.clubdelphi.com/foros/showthread.php?t=65817
Espero te sirva.
Saludos.

Yoana 13-09-2010 20:53:04

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.

Neftali [Germán.Estévez] 14-09-2010 09:48:18

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.

Yoana 17-09-2010 19:37:23

Muchas gracias, problema solucionado.
revise la transacción y colocación de ISOLATION LEVEL y con eso lo solucione.


Gracias por el apoyo. :D

AzidRain 18-09-2010 01:17:17

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