FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Problema con Nº de pedidos SQL server ADO.
Estoy trabajando con una base de datos remota a la que acceden múltiples usuarios de varios países.
Para controlar la numeración utilizaba un campo integer que iba incrementando manualmente por años para luego crear un string más complejo del estilo 2010-PV000001. Cuando el usuario desea crear un nuevo pedido el programa (no la base de datos) obtiene el último número integer, le suma uno y lo inserta en el nuevo registro dejando el resto en blanco. Todo iba bien con la red interna hasta que este enero el número de usuarios empezó a incrementarse y se añadieron nuevos accesos internacionales con diferentes velocidades de ADLS. La semana pasada aleatoriamente se empezaron a repetir número de pedidos, no masivamente pero sí varios una o dos veces por semana. Visto esto estoy seguro que el problema irá en aumento y por eso os pido consejo. ¿Cómo lo solucionaríais? ¿Procedimiento almacenado?, bloqueo? Gracias |
#2
|
||||
|
||||
¿Porqué no utilizas un campo Identity y le dejas ese trabajo al servidor?
A partir del Identity tú puedes componer el otro campo como te interese.
__________________
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
|
|||
|
|||
No lo utilizo porque cada año la numeración se ha de reiniciar a cero. Tendría que modificar cada 1 de enero el código y restar el incremento del campo identidad.
|
#4
|
||||
|
||||
Porque no le das un número de pedido provisional a cada usuario y solamente cuando graben el pedido le das el número real.
Aparte de esto si el número de Pedido fuera PK evitarías la repetición. Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#5
|
|||
|
|||
Cita:
Entre el SELECT y el INSERT pueden pasar milisegundos pero ya es suficiente como para encontrar registros con el mismo número. Si invierto el proceso tendría el mismo problema a la hora de guardar y crear el nuevo número. Si dos usuarios guardaran a la vez, ambos acabarían con el mismo número como ahora. |
#6
|
||||
|
||||
Cita:
A la hora de hacer el INSERT del registro, debes hacer el SELECT y el INSERT del contador, todo ello dentro de la misma transacción, de forma que se el INSERT del registro falla (por lo que sea) tampoco se actualice el contador. Además, utilizando los diferentes tipos de ISOLATION (para la transacción) creo que puedes llegar a bloquear las lecturas del resto de usuarios para que no obtengan el mismo contador. Si estás accediendo con ADO, en la conexión y en las consultas también puedes modificar esta característica.
__________________
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. |
#7
|
|||
|
|||
Cita:
Por si a alguien le interesa la pongo aquí : Código:
DECLARE @numero int BEGIN TRAN SELECT @numero = max(N_PRESUPUESTO) FROM PEDIDOS WHERE fecha > '01/01/2010' INSERT INTO PEDIDOS (N_PRESUPUESTO) values (@numero+1) COMMIT TRAN select @@identity as pedido Última edición por HccSoft fecha: 20-01-2010 a las 17:37:25. |
#8
|
||||
|
||||
Cita:
Saludos. |
#9
|
||||
|
||||
Cita:
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
#10
|
|||
|
|||
Cita:
De todas formas me interesaría saber como se puede bloquear el acceso a una tabla mientras realizas alguna operación. Nunca va mal tener varias soluciones para estos problemas. Gracias a todos |
#11
|
||||
|
||||
Obviamente el bloqueo de un registro varía de unos motores a otros por lo que la mejor solución es consultar la ayuda para el tipo de tablas-componentes-motor utilizado.
Un Saludo.
__________________
Guía de Estilo de los Foros Cita:
|
|
|
Temas Similares | ||||
Tema | Autor | Foro | Respuestas | Último mensaje |
Problemas al grabar Facturas o Pedidos? | FelipeDiaz | Conexión con bases de datos | 4 | 14-01-2008 21:14:28 |
Pedidos con un mes de antiguedad ¿¿¿cómo??? !!!!!!!! | david_uh | SQL | 5 | 06-08-2007 05:54:30 |
Ayuda con sistema de pedidos | XBart | OOP | 2 | 20-07-2006 00:48:51 |
Ayuda con consulta de ultimos pedidos | Faust | SQL | 2 | 10-07-2006 09:51:01 |
consulta sql (pedidos y cotizaciones) | Caro | SQL | 2 | 13-06-2006 17:52:47 |
|