GARANTIR DESCONTO

Fórum Codigo que autoincrementa #40591

04/12/2003

0

E ae galera plugada no fórum do Clube Delph estou com um probleminha básico e necessito a ajuda de vcs.

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

Verme

Responder

Posts

04/12/2003

Travain

O seguinte:

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.


Responder

Gostei + 0

04/12/2003

Afarias

Gerar códigos automáticos por outra forma q não usando GENERATORS não é uma prática ´aceitável´ em qualquer aspecto para sistemas multi-usuário.

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+


Responder

Gostei + 0

05/12/2003

Lefarr

Eu uso essa Trigger para fazer isso, porem tenho um problema. Quando eu vou salvar o registro se o campo código nao tiver algum valor o registro não é salvo. Alguém pode me ajudar, preciso que o valor do campo seja colocado assim que o registro for colocado em inserção, não na hora que esta salvando.

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 ;^


Responder

Gostei + 0

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar