Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Conexión con bases de datos (https://www.clubdelphi.com/foros/forumdisplay.php?f=2)
-   -   Clientdataset y concurrencia (https://www.clubdelphi.com/foros/showthread.php?t=26365)

Johnny Q 20-10-2005 16:31:48

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.

epuigdef 20-10-2005 17:14:52

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

Johnny Q 20-10-2005 17:25:01

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:confused:

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;


jfgonzalez 20-10-2005 18:28:44

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

Johnny Q 20-10-2005 18:45:26

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.

lucasarts_18 21-10-2005 17:01:03

Hola:

Y ese dato consecutivo, podría ser un campo autoincrement definido en la
BD ?

Hasta Luego.

Programero 25-10-2005 20:35:49

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


La franja horaria es GMT +2. Ahora son las 21:54:32.

Powered by vBulletin® Version 3.6.8
Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
Traducción al castellano por el equipo de moderadores del Club Delphi