FTP | CCD | Buscar | Trucos | Trabajo | Foros |
|
Registrarse | FAQ | Miembros | Calendario | Guía de estilo | Temas de Hoy |
|
Herramientas | Buscar en Tema | Desplegado |
#1
|
|||
|
|||
Clientdataset y concurrencia
Un saludo a todos.
Tengo 2 ClientDataSet para crear Facturas con Detalles, yo mismo asigno el consecutivo cuando se genera una nueva factura. Todo me funciona de maravilla excepto cuando dos o mas usuarios intentan crear al mismo tiempo una factura, pues se genera el mismo consecutivo. He podido reasignar hasta cierto punto el consecutivo cuando se da esta concurrencia, pero tengo problemas cuando trato de editar los detalles. No se si influya el hecho de que los datos están en memoria hasta que no se aplique ApplyUpdates(0). Si alguien me puede dar una mano con este problema estare muy agradecido. |
#2
|
||||
|
||||
Buenas!
Lo normal sería que buscaras el número de factura en el momento de grabarla, no al principio. En este caso es muy difícil que haya concurrencia. Edu |
#3
|
|||
|
|||
justamente eso es lo que estoy haciendo, antes de guardar verifico cual es el consecutivo mayor y lo incremento en 1, y cuando ya lo tengo intento asignarlo a los detalles editandolos con un While pero algo raro sucede y solo me reasigna algunos y otros me los guarda con el consecutivo sin incremento
El codigo para modificar los detalles es el siguiente: Código:
ClientDataSet2.first; while not ClientDataSet2.eof do begin ClientDataSet2.Edit; ClientDataSet2.FieldValues['codigo'] := qryMaximomaximo.Value + 1; ClientDataSet2.Post; ClientDataSet2.Next; end; |
#4
|
|||
|
|||
Tabla de consecutivos
Hola
La verdad si el desarrollo que haces maneja facturación, veo que es bastante amplio, entonces deberías manejar una tabla libre para consecutivos, y cuando empiezas a hacer la nueva la factura ,lees el consec actual lo incrementas y vuala el usuario 1 ve la factura #123 y el usuario 2 ve la factura #124 atento a cualquier comentario |
#5
|
|||
|
|||
Tienes razón Juan Fernando, a nivel visual es muy bueno lo que tu propones, pero supon el caso en que el usuario que tomo el # 123 cancelo la operación; en tal caso ese numero no se almacenaria en la base de datos. Para evitar ese inconveniente es mejor leer e incrementar el consecutivo justo antes de grabar.
|
#6
|
||||
|
||||
Hola:
Y ese dato consecutivo, podría ser un campo autoincrement definido en la BD ? Hasta Luego.
__________________
No todo es como parece ser... |
#7
|
|||
|
|||
Codigos consecutivos
lo que puedes hacer hacer es los siguiente;
en el evento Before Post ejeucutas una consulta que te trae el proximo codigo el cual es generado en la DB esto me funciona de maravillas y en tu base de datos debes de hacer el varlo de tu clave primaria se inserte arbitrariamente osea en tu triger que debes de poner el valor directamente no debes de poner if New.mi_id is null then debes de poner de asi new.mi_id = gen_id(mi_gerator, 1); de esta manera entonces si dos usuarios lleven el mimo numero lo unico que pasara es que no podra ver los datos que ingreso pero se arregla con un refresh salu-2 |
|
|
|