Fórum Codigo que autoincrementa #40591
04/12/2003
0
Eu quero que o meu código de clientes autoincremente sozinho. Já analisei vários exemplos utilizando o generator do IBConsole e a Trigger que dispara o generator, mas continuo com o mesmo problema. O que tá acontecendo é o seguinte:
1- Quando entro na tela de cadastro de cliente pela primeira vez e cadastro o meu primeiro cliente, o DBEdit armazena o codigo em zero.
2 - Daí, quando eu resolvo cadastrar outro o DBEdit incrementa com o número Um......até aí tudo bem, mas quando eu cancelo a inserção do novo usuário e resolvo cadastrar novamente, o DBEdit em vez de setar pra mim o número Um, ele seta o número Dois.
3 - Mesma coisa acontece quando eu saio da tela e retorno nela pra cadastrar outro, daí o DBEdit seta o número 3.
Se alguem souber como resolver esse probleminha básico ou em SQL ou linha de programação mesmo, desde já agradeço!!!!!
Atenciosamente, .....VERME.....
Verme
Curtir tópico
+ 0Posts
04/12/2003
Travain
Quando você utiliza GENERATORS, o Firebird coloca-os em outra transação, bem para os números não se repetirem. Entenda assim: o usuário 1 está incluindo um cliente. O GENERATOR vai para 1. O usuário 2 também entra inserindo outro cliente, o GENERATOR vai para 2. Se o usuário 1 cancelar a inserção do registro, o GENERATOR não pode voltar o número, pois já existe outra inserção sendo feita. Uma forma de resolver isto é trabalhar com o MAX() no evento ONBEFOREPOST, mas daí você não apresentará o código para o usuário. Tem que analisar se compensa dispensar o GENERATOR.
Até mais.
Gostei + 0
04/12/2003
Afarias
Bom, como corretamente colocado pelo Travain, não é possível (ou correto) retornar o valor de um GENERATOR, e vc não deveria se preocupar NUNCA com isso -- pense com lógica:: qual a função do código?? -- identificar de forma única um determinado ´objeto´ não importa se existem ´buracos´ entre os códigos ou não... ninguêm nunca vai se ´aperceber´ disso (em termos de negócio).
O máximo q vc pode fazer é esperar até o último momento para gerar o código (ex: deixar o código em branco durante o cadastro e gerar esse código apenas no POST -- na hora em q o usuário realmente decidir gravar o registro)
T+
Gostei + 0
05/12/2003
Lefarr
Trigger:
SET TERM ^ ;
/* Triggers only will work for SQL triggers */
CREATE TRIGGER ´CLIENTESGENERATOR´ FOR ´CLIENTES´
ACTIVE BEFORE INSERT POSITION 0
AS BEGIN
IF (NEW.CLICOD IS NULL OR NEW.CLICOD = 0)
THEN NEW.CLICOD = GEN_ID(Clientes_CLICOD_Gen, 1);
END
^
COMMIT WORK ^
SET TERM ;^
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)