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)
-   -   Resetear generador (https://www.clubdelphi.com/foros/showthread.php?t=20185)

novaten 07-04-2005 21:55:32

Resetear generador
 
tengo una form en delphi con una bd firebird y para introducir datos uso unos edits y una dbnav.

la tabla de la bd tiene un autonumerico con un generador y un tigger y funciona bien, imaginemos que voy en el registro 17, le doy a nuevo, me arrepiento y le doy cancelar, pues bien, la proxima vez que haga un cliente nuevo el me genera el 19 y el 18 no, como puedo hacer para que cuando cancele la introduccion de un registro no me sume el generador.
saludos.

marcoszorrilla 07-04-2005 22:37:14

Por una parte:

Set Generator Nombre_Generador To XXX

Sin embargo la labor principal del generador no es la de generar números consecutivos.

Una solución puede ser general el número despues de insertar, para evitar que haya cancelaciones, otra valerse de un contador situado en una tabla auxiliar...

Un Saludo.l

erickahr 08-04-2010 19:15:42

Tarde, tarde...
 
Antes que me digan que estoy cinco años tarde, aclaro, andaba buscando otra cosa y por casualidad llegue aqui. Al ver los posts del hilo, recordé que tengo algo similar a lo que mencionan, solo que no ocupo generadores; para insertar un nuevo registro en cierta tabla lo hago mediante un StoredProc, se que no le servira para nada a quien inicio el hilo, pero ojala le sea de utilidad a alguien más, aqui esta el codigo :D.

Código SQL [-]
CREATE PROCEDURE SP_MOVIMIENTOS (
    idajuste numeric(15,0),
    fecha date,
    movimiento varchar(70),
    cargo numeric(15,2),
    ajusto varchar(70),
    valido smallint,
    idtienda numeric(15,0),
    idmov numeric(15,0))
as
declare variable ultimo numeric(15,0);
begin
Select max(idmov)+1 from movimientos into ultimo;
if (ultimo>=0) then
    idmov=ultimo;
insert into movimientos (idajuste, idmov, fecha, movimiento, cargo, ajusto, valido, idtienda)
values (:idajuste, :idmov, :fecha, :movimiento, :cargo, :ajusto, :valido, :idtienda);
end^

Aqui dejo el codigo que utilizo en delphi al guardar el nuevo registro, y como notarán el parametro IDmov se lo paso en el StoredProc y en delphi solo mando los demás parametros.

Código Delphi [-]
 With spMvtos Do
          Begin
          ParamByName('idajuste').AsInteger:=idajuste;
          ParamByName('fecha').AsDate :=Date();
          ParamByName('idmov').AsInteger  :=0;
          ParamByName('movimiento').AsString :='AJUSTE DE INVENTARIO';
          ParamByName('cargo').AsFloat:=xImporte;
          ParamByName('ajusto').AsString :=Ajusto;
          ParamByName('valido').AsInteger:=1;
          ParamByName('idtienda').AsInteger:=frDatos.idTienda;
          ExecProc;
          end;


La franja horaria es GMT +2. Ahora son las 10:53:51.

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