![]() |
![]() |
| 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
|
|||
|
|||
|
Ordenes entrelazadas
Hola gente del foro, una preguntita.
Desarrolle una aplicación para generar ordenes de compra, lo cual queda registrado en 2 tablas, COMPRAS Y DETCOMPRAS. Utilizo Delphi 2006, Firebird 2.0 y cmponentes Interbase. Esto funciona de la siguiente manera, el usuario al presionar el boton de nueva orden, el software se conectada a la BD, y guarda un registro los campos usuario y fecha. Gracias a un generador y un trigger le asigno un correlativo unico. Hasta aqui todo bien, el problema surge cuando tengoq ue comenzar a ingresar el detalle de la orden. Para saber a cual numero de orden tengo que asignarle los detalles ingresados, justo después de agregar el registro en la tabla COMPRAS, realizo una consulta a esa misma tabla preguntando por el máximo númoer de orde. El asunto es que si fuera un solo usuario, esto funcionaria de maravilla, pero me ha ocurrido que mas de 1 usuario ha realizado la operación al mismo tiempo y ocurre que el detalle de las ordenes se mezclan. Existe una mejor idea de como resolver esto? Espero me puedan ayudar. Saludos |
|
#2
|
||||
|
||||
|
Tienes que tener un campo en el detalle compra que sea el codigo de la compra.
En cada new record del detalle le dices que el id de este detalle es el id de la compra, pero en un campo que no sea el id del detalle. Ejemplo Cabecera de la compra ID_COMPRA FECHA ID_CLIENTE....... Aquí el ID_COMPRA puede ser autoincrementable Detalle de la compra ID_DETALLE ID_COMPRA REFERENCIA PRECIO...... Aqui el ID_DETALLE puede ser autoincrementable pero ni el ID_COMPRA que se lo pasas de la cabecera. Espero te sirva Josep |
|
#3
|
|||
|
|||
|
Asi es exactamente como lo tengo desarrollado.
El código se ejecutada de la siguiente manera: Se presiona el button para una nueva orden. El codigo del botton es asi:
El campo NOC es autoincremental, pero al parecer cuando 2 usuarios tratan de realziar una nueva orden se duplicada los numeros y no entiendo bien que es lo que ocurre. Es por eso que me dirijo a usted para resolver esto, o mejor aún una mejor forma de realizar esto. Como lo haría usted?? Espero me puedan ayudar. |
|
#4
|
|||
|
|||
|
Existe la opción se enviarle el NOC incrementado al usuario que lo ingreso, esto para evitar tener que consultar cual es el máximo NOC.
La idea sería que el mismo motor de BD, cada vez que se insertara un registro en la tabla COMPRAS, devolviera solamente al usuario que realizo el ingreso del registro el número NOC incrementado. De esta forma utilizo ese correlativo para ingresar los registros en la tabla DETCOMPRAS, en el campo NOC. Se podrá hacer esto? Valdrá la pena desarrollarlo? La teoría como dice que se debiese realizar? Espero me puedan ayudar. Saludos |
|
#5
|
||||
|
||||
|
Yo en casos así, lo que hago es buscar el ultimo valor de la tabla y le sumo 1 cuando doy de alta el registro.
Josep |
|
#6
|
||||
|
||||
|
Hemos hablado otras veces de este tema.
La primera opciçon es intentar hacerlo utilizando transacciones. Deberías probar a realizar la inserción y consulta en la misma transación (tal vez debas jugar con el Isolation Level de la transacción). La segunda la uso para SQL Server, desconozco si en FB hay algo similar (algun experto en FB que nos lo confirme). En SQL Server existe una opción de para saber cual es el último AUTOINCREMENTAL insertado. Utilizandolo puedes crear un Stored Procedure que inserte en registro y a la vez devuelva el valor del autoincremental (utilizando parámetros).
__________________
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. |
![]() |
| Herramientas | Buscar en Tema |
| Desplegado | |
|
|
Temas Similares
|
||||
| Tema | Autor | Foro | Respuestas | Último mensaje |
| Como contar ordenes de impresion? | JuanErasmo | C++ Builder | 2 | 25-01-2006 20:35:17 |
|