SEQUÊNCIA DA TABELA FORA DE ORDEM..
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);
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
Curtidas 0
Respostas
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:
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:
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.
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
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
GOSTEI 0