GENERATORS Quaise Perfeito(InterBase)....Ajuda

Firebird

11/03/2004

Ai pessoal tudo bem?.........Eu peguei este exemplo no site de como auto-incrementa o código em Procedures...........Estar abaixo.....
Estar quais perfeito .........O problema e Seguinte ....Estou no Código 10......Vou cadastra Novo Código “11&8221;
.....Caso eu desisto este código teria que volta para 10........(Problema) .... Mas não o código vai para 12 .....Tem como resolver isto.....??

Se alguém e Pode me manda um simples Programa de Exemplo com fonte de Auto-Incremento ...fico muito grato .......jairoliga@ig.com.br .................[ ]........Jairo


procedure TForm1.Button1Click(Sender: TObject);
begin
IBTransaction1.StartTransaction;
if not IBStoredProc1.Prepared then
IBStoredProc1.Prepare;
IBStoredProc1.ExecProc;
Edit1.Text := IntToStr(IBStoredProc1.ParamByName(´ATUAL´).AsInteger);
IBTransaction1.Commit;
end;


Jairo-go

Jairo-go

Curtidas 0

Respostas

Afarias

Afarias

11/03/2004

|.....Caso eu desisto este código teria que volta para 10........
|(Problema) .... Mas não o código vai para 12 .....Tem como resolver
|isto.....??

NÃO RESOLVE! Está PERFEITO para quem trabalha em rede com sistemas multi-usuário -- é exatamente assim q valores incrementais devem funcionar em SGBDs

Se vc voltar o número!! Um abraço:: Vai pintar erro na telinha! (a não ser q seu sistema não seja usado em rede por mais q uma pessoa simultâneamente)


T+


GOSTEI 0
Jairo-go

Jairo-go

11/03/2004

Farias tb? meu sistema não esta em Rede..............


GOSTEI 0
Marbravo

Marbravo

11/03/2004

Eu tinha esse problema no inicio.

execute o codigo quando for confirmar o cadastro
IBTransaction1.StartTransaction; 
if not IBStoredProc1.Prepared then 
IBStoredProc1.Prepare; 
IBStoredProc1.ExecProc; 
Edit1.Text := IntToStr(IBStoredProc1.ParamByName(´ATUAL´).AsInteger); 
IBTransaction1.Commit; 


Caso queira exibir o numero do registro durante o cadastro execute esse codigo ao inserir:
TABLE.Last;
         VAR := TABLERegistro.asinteger;
         TABLE.Insert;
         TABLERegistro.Asinteger := VAR; 


espero ter ajudado


GOSTEI 0
Afarias

Afarias

11/03/2004

|Farias tb? meu sistema não esta em Rede..............

Bom... mas o IB/FB são feitos para Rede!

De qualquer forma, se não for usar seu sistema em rede, tudo bem voltar o valor do generator, não vai ter problemas -- para ´voltar´ o código de um generator basta passar -1 no GEN_ID::

select gen_id(generator, -1) from rdb$database

ou em uma SP::

i = gen_id(generator, -1);

(simplesmente cancelar ou dar um Rollback não voltará o código)


No mais, vc devia seguir o conselho do MarBravo e ´criar´ o código apenas quando for confirmado a gravação, assim vc teria menos ´buracos´ de códigos, e seu sistema poderia funcionar em rede se fosse necessário no futuro!


T+


GOSTEI 0
POSTAR