FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
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. |
#2
|
||||
|
||||
¿Haces commit al finalizar la actualización del campo?
Un saludo |
#3
|
||||
|
||||
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.
__________________
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. |
#4
|
||||
|
||||
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
|
#5
|
||||
|
||||
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.
__________________
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. |
#6
|
||||
|
||||
Hola, este tema se trato acá http://www.clubdelphi.com/foros/showthread.php?t=65817
Espero te sirva. Saludos. |
#7
|
|||
|
|||
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. |
#8
|
||||
|
||||
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.
__________________
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. |
#9
|
|||
|
|||
Muchas gracias, problema solucionado.
revise la transacción y colocación de ISOLATION LEVEL y con eso lo solucione. Gracias por el apoyo. |
#10
|
||||
|
||||
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.
__________________
AKA "El animalito" ||Cordobés a mucha honra|| |
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Trigger varios consecutivos | seara2005 | Firebird e Interbase | 4 | 18-11-2009 15:46:19 |
crear txt consecutivos en builder | BC++ | C++ Builder | 2 | 13-11-2009 01:03:35 |
Numeros de Recibo Consecutivos | Camilo | Conexión con bases de datos | 6 | 03-08-2007 09:46:01 |
Bloques De Numeros Consecutivos | dany2006 | C++ Builder | 5 | 15-11-2006 21:06:16 |
Inserción de datos consecutivos | pallyJD | Tablas planas | 1 | 27-10-2006 18:22:34 |
|