Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Tablas planas (https://www.clubdelphi.com/foros/forumdisplay.php?f=20)
-   -   se me pisan los registros (https://www.clubdelphi.com/foros/showthread.php?t=59566)

javequipos 01-09-2008 10:35:12

se me pisan los registros
 
Estan funcionando 3 cajas a la vez emitiendo entradas, pero en algun momento dos cojen el numero de ticket 171 por que algun terminal no lo alcanza a grabar y se me pierde uno.

Parte de la rutina es la siguiente :

Código Delphi [-]
               Movtos.Last;
               Numero:=Movtos.FieldByName('Ticket').Value+1;
               Movtos.Append;
               Movtos.FieldByNAme('Ticket').AsFloat:=Numero;
               Movtos.Post;
               dbiSaveChanges(Movtos.Handle);
               Application.ProcessMessages;
               Movtos.SetKey;
               Movtos.FieldByName('Ticket').Value:=Numero;
               Movtos.GotoKey;
               Movtos.Edit;
               Movtos.FieldByName('TPV').AsString:=GetEnvironmentVariable('NOMPC');
               Movtos.FieldByName('Usuario').AsString:=Inicio.NomUser;
               Movtos.FieldByName('Cantidad').AsString:='1';

y el resto hasta el post.

Alguna solucion mejor para asegurarme que siempre tome el ultimo registro y lo tome para si ?....
no se si se entiende, pero en la operatoria sucede que si el ultimo registro guardado tiene como numero de ticket 170, y dos terminales venden simultaneamente 5 entradas por ejemplo, pero sucede que por alguna razon dos terminales toman el 170 y le suman 1 pero solo uno despues queda grabado...el otro se pierde.

La verdad esto me quedo cuadrado, no se que hacer ya.
Uso delphi 6 enterprise.

Gracias por la ayuda.:(

coso 01-09-2008 12:08:49

Deberias hacer, antes del last, un Table.refresh, para cargar realmente los ultimos cambios en la base de datos: asi si alguien acaba de insertar un nuevo ticket, se reflejara en tu dataset.

Crandel 01-09-2008 12:22:13

Es comprensible lo que sucede, al tener un indice por el numero de Ticket. No puedes dos ticket con el mismo número y por ello los siguientes con el mismo número no se graban.

Todo depende de que motor de base de datos usas. Pero una buena solución es grabar los registros mediante un procedimiento almacenado, le pasa los paramtros del nuevo registro y te devuelve el nuevo indice.

De esta forma, es el servidor el que asigna cada numero y no el cliente.


La franja horaria es GMT +2. Ahora son las 18:48:21.

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