PDA

Ver la Versión Completa : Resetear generador


novaten
07-04-2005, 21:55:32
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
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.


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.


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;