SEQUÊNCIA DA TABELA FORA DE ORDEM..

SQL

Banco de Dados

07/03/2022

Então pessoal estou com um problema em uma tabela, mais especificamente na de contratos, quango gero um novo contrato ele não segue a sequência, quado excluo a tabela no ibexpert e refaço novamente com a sequência certa e gero um no contrato ele pega a nova sequência, só que quando exluo o contrato no sistema e faço um novo ele volta para o problema e pega a sequência seguinte como se não tivesse apagado o contrato anterior, ou seja se gero o contrato 1600 o seguinte obviamente seria o 1601 e quando excluo o contrato 1600 e faço um novo ele gera a sequência 1602 em vez do 1600 que tinha apagado.


TABELA CONTRATO - INSERT INTO SEQPRIMARYKEY (TABELA,CHAVEVALOR,ID_INT,ID_STR,ID_DATA,ID_FLOAT,ID_INT_BLOQ,ID_STR_BLOQ,ID_DATA_BLOQ,ID_FLOAT_BLOQ) VALUES ('CONTRATOs','ESTAB=1100',1311,NULL,NULL,NULL,NULL,NULL,NULL,NULL);
Flavio Teixeira

Flavio Teixeira

Curtidas 0

Respostas

Emerson Nascimento

Emerson Nascimento

07/03/2022

provavelmente você atribui o id no teu sistema, em algum evento do dataset, e deve ainda ter um trigger que atribui novamente o id.
se você faz dessa forma, condicione o trigger a preencher o id somente se este estiver nulo.

exemplo de trigger:
CREATE TRIGGER trgTTEST_BI_V1 for TTEST
active before insert position 0
as
begin
  new.id = gen_id( gidTest, 1 );
end
no exemplo acima o id será atribuído mesmo a aplicação já tenha atribuído valor ao campo. então se a aplicação atribuiu 1, o trigger vai trocar pra 2.

o correto seria:
CREATE TRIGGER trgTTEST_BI_V2 for TTEST
active before insert position 0
as
begin
  if (new.id is null) then -- verifica se o campo está vazio (nulo), e somente nesse caso atribui valor ao campo
  begin
    new.id = gen_id( gidTest, 1 );
  end
end
no exemplo acima um id será atribuído somente se o id estiver vazio (nulo). ou seja, se a aplicação já atribuiu um valor, o trigger nada fará e o valor atribuído pela aplicação será mantido.


GOSTEI 0
POSTAR