Foros Club Delphi

Foros Club Delphi (https://www.clubdelphi.com/foros/index.php)
-   Varios (https://www.clubdelphi.com/foros/forumdisplay.php?f=11)
-   -   ¿como obtener folios consecutivos mysql firebird postgresql? (https://www.clubdelphi.com/foros/showthread.php?t=83744)

JXJ 23-07-2013 06:02:09

¿como obtener folios consecutivos mysql firebird postgresql?
 
hola.
pongo esto en varios por que estoy en el problema de generar folios consecutivos
en un ambiente multiusuarios.

Es decir. tengo la base de datos en el servidor.
a la que se conectan 10 usuarios 2 en cada sucursal 5 sucursales en total y a veces
si se tiene la serie y el folio

SUCURSAL1 1000

y se hace una venta.
con la computadora del usuario 1
y en la computadora del usuario 2
se hace igualmente una venta casi al mismo tiempo.

en lugar de que la secuancia sea
SUCURSAL1 1000
SUCURSAL1 1001
SUCURSAL1 1002

sale

SUCURSAL1 1000
SUCURSAL1 1001
SUCURSAL1 1001


Código SQL [-]
                  MyQueryDatEmp.SQL.Add('SELECT MAX(folio) AS FolioFact FROM Facturas WHERE Serie = ''' + serie + '''');

¿que tecnicas usan para que no se les repitan folios?

¿que tecnicas usan los bancos para tener folios seguros, imagino los de los pagos que se hacen y los cobrar a las cuentas.?

gracias.

:D

cloayza 23-07-2013 07:43:32

Amigo le propongo que la obtención del numero de secuencia lo asigne en un trigger o disparador de la tabla...

Ejemplo Firebird:
Código SQL [-]
CREATE OR ALTER trigger FACTURAS_bi for FACTURAS
active before insert position 0
AS
BEGIN
          FOR SELECT MAX(Facturas.FOLIO) 
                 FROM Facturas 
                 WHERE Facturas.Serie = NEW.Serie
          INTO NEW.FOLIO;

END

Saludos...

Casimiro Notevi 23-07-2013 11:09:08

Lo indicado por cloayza es la mejor solución.
Aunque hay un fallo en la estructura de tu base de datos:
SUCURSAL1 1001
SUCURSAL1 1001
Ese dato debe ser clave única, no permitir duplicados.
De esa forma te saltaría una excepción y podrías controlarlo para asignarlo el siguiente número.

JXJ 23-07-2013 20:08:04

hola cloayza

esa opcion la voy a probar.

Casimiro Notevi


yo meneje asi esas tablas por que cuando se ingresan las facturas.
cada una tiene su serie y folio.
y a veces sin serie. puro folio.

es decir.

SUCURSAL1 1001
SUCURSAL1 1001

SUCURSAL2 1001
SUCURSAL2 1001

1001
1001

no me parecio adecuado usar la clave unica para tener la secuancia de numeracion.

o tal vez entendi mal tu observacion.

Casimiro Notevi 23-07-2013 20:55:50

Me ha parecido entender que el problema que tienes es que se repiten.
Por lo tanto, si eso es así, entonces hay que evitar que se repitan, el campo debe ser clave única, sin duplicados.


La franja horaria es GMT +2. Ahora son las 14:10:06.

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