![]() |
![]() |
| Paypal | FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
|||||||
| Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Buscar | Temas de Hoy | Marcar Foros Como Leídos |
![]() |
|
|
Herramientas | Buscar en Tema | Desplegado |
|
|
|
#1
|
|||
|
|||
|
Numeracion de factura repetido
Buenas estoy generando un numero de orden lo hago consultando el ultimo registro de una tabla y le sumo uno, pero el problema es que a veces me repite el numero mas que todo cuando se hace una orden desde otra estación el sistema funciona en 10 maquinas. aca el codigo que uso para calcular el numero.
|
|
#2
|
||||
|
||||
|
Tienes varias alternativas, por ejemplo, cuando vayas a grabar y ya exista el número entonces le asignas uno más. Si existe, le asignas uno más... y así hasta que por fin ya no exista. O sea, sería un simple bucle.
La otra alternativa es usar un generador, el inconveniente es que puedes tener "saltos" entre los números si, por ejemplo, alguien cancela el alta de un registro y ya se le había asignado el número que tocaba.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#3
|
||||
|
||||
|
Cita:
Espero que te sirva. Un saludo. |
|
#4
|
||||
|
||||
|
Yo no soy partidario de hacerlo de forma automática en función de los registros de la tabla. Lo que hago es manejar un registro de contadores y cuando se va a asignar el número bloquea ese registro, toma el número, le asigna uno más y lo desbloquea. Así nos aseguramos que los números no se repiten y tienes la posibilidad de poner el contador en el número que quieras en un momento determinado, bien para recuperar un número de factura perdido o para empezar en una numeración determinada porque al cliente le interese. Si es cierto que de esta forma tendrías que controlar que cuando intentas asignar el número no haya un registro con el mismo porque si se ha puesto manualmente en el contador un número que ya exista puede pasar.
Saludos |
|
#5
|
|||
|
|||
|
Y porqué simplemente no asignas el número de factura cuando vas a grabar? La operación de grabar debe ser algo rápido, y por lo tanto el número no va a estar bloqueado mucho tiempo...
|
|
#6
|
||||
|
||||
|
Personalmente creo que la solución más segura es utilizar transacciones para conseguir que la operación sea "unitaria"; No comentas qué SGBD estás utilizando, pero si además esa operación puedes hacerla en el servidor, mejor aun.
Cita:
(1º) Supongo que debes tener índice definido por el campo IDOrden; Si no es así defínelo. (2º) No hace falta hacer el SELECT de toda la tabla, cuando en realidad sólo necesitas un registro. Porque luego debes hacer el recorrido hasta el final (Last) cosa que es muy costosa. Puedes utilizar alguna de estas variantes para obtener un único registro. SELECT Max(IDOrden).... SELECT TOP(1) .... ORDER BY DESC Cita:
Deberías definir un índice único (en la Base de Datos) por el campo IDOrden, cosa que no debes tener ahora si estás obteniendo duplicados. Creo que eso es lo que está haciendo ahora, pero para grabar el número debe consultar primero cual es el último; Y entre la consulta y la grabación es cuando se le cuela otra máquina y se producen los repetidos.
__________________
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
|
|||
|
|||
|
Uso mysql y el procedimiento lo uso justo cuando voy a grabar
|
|
#8
|
|||
|
|||
|
Hacer un Bucle en Delphi
Buenas como hago para que mi aplicación ejecute un procedimiento siempre y cuadno se cumpal una condicion y si no se cuemple vuelva a verificar hasta que esta se cumpla.
Por ejemplo que consulte si un numero existe un una tabla, si existe vuelva a hacer una consulta y le incrmente un numero (numero+1) hasta que la consicion se cumpla y guarde los datos |
|
#9
|
||||
|
||||
|
Puedes hacerlo dentro de un ciclo While o Repeat o mucho mejor usar un Hilo(Thread)
![]() Saludos... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
|
#10
|
|||
|
|||
|
Hacer un Bucle en Delphi
Como hago para hacer un bucle donde asignas un número, intentas grabarlo y si da error (porque ya existe) entonces le sumas 1, hasta que no dé error.
el numero lo asigno consultando una base de datos y le sumo uno pero si por error esta repetido que haga el bucle aca coloco un poco del codigo.
|
|
#11
|
||||
|
||||
|
Me parece
que éstas creando muchos hilos para tu misma pregunta...lee por favor nuestra Guía de estilo...para conocer ciertas reglas del foro. ![]() Saludos... ![]()
__________________
"Pedid, y se os dará; buscad, y hallaréis; llamad, y se os abrirá." Mt.7:7 |
|
#12
|
||||
|
||||
|
He unido todos los hilos creados sobre el mismo tema.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#13
|
||||
|
||||
|
Si tienes una tabla con un campo CODIGO que quieras tenerlo numerado y no repetido entonces crea ese campo como índice y único, y si es posible también como clave principal de la tabla
Si no te importa tener números "en blanco" entonces puedes usar un generador, en caso contrario tendrás que controlar tú mismo el número cada vez que se va a crear un registro.
Más o menos es así, lo he escrito de memoria y depende de tus componentes, dataset, etc.
__________________
La otra guía de estilo | Búsquedas avanzadas | Etiquetas para código | Colabora mediante Paypal |
|
#14
|
||||
|
||||
|
Y digo yo....
Ya que pareces empeñado en hacerlo calculando el último registro mas uno no sería mejor hacerlo en un "before insert" trigger? |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| No consigo hacer funcionar este bucle. | radge | Varios | 14 | 27-01-2009 18:54:35 |
| hacer un bucle | esimon | OOP | 4 | 25-01-2009 21:27:37 |
| Bucle for de 2 en 2 | douglas | OOP | 9 | 17-10-2007 15:55:53 |
| Se puede hacer un bucle a un TTimer | gontxalo | OOP | 2 | 18-07-2005 21:37:53 |
| bucle dentro de un bucle | Cosgaya | Varios | 2 | 06-06-2005 07:05:16 |
|