Ir para conteúdo
Fórum Script Brasil
  • 0

(Resolvido) auto incremento personalizado


antonio.ajsl

Pergunta

Caros,

Tenho as seguintes tabelas no MySQL 5:

GrupoContas - PlanoContas

GrupoContas

Id - int(1),auto incremento, pk

Nomenclatura - varchar(30)

PlanoContas

IdGrupoConta - int(1),fk, unique

CodRed - int(4),auto incremento, pk

CodConta - varchar(10),unique

GropoContas

1 ATIVO

2 PASSIVO

3 DESPESA

PlanoContas

1 1001 1000000000

1 1002 1100000000

1 1003 1110000000

1 1004 1110000000

2 2001 2000000000

2 2002 2100000000

2 2003 2110000000

3 3001 3000000000

3 3002 3100000000

3 3003 3110000000

Como proceder para que o campo 'CodRed'

fosse incrementado, mas considerando o campo 'IdGrupoConta'. Quando o

valor de 'IdGrupoConta' for 1, o campo 'CodRed' será incrementado a

partir de 1001 até 1999. Quanto for 2, será incrementado a partir de

2001 até 2999, e assim sucessivamente.

Dá pra implementar isso no MySQL?

Agradeço a ajuda

Link para o comentário
Compartilhar em outros sites

3 respostass a esta questão

Posts Recomendados

  • 0
Como proceder para que o campo 'CodRed'

fosse incrementado, mas considerando o campo 'IdGrupoConta'. Quando o

valor de 'IdGrupoConta' for 1, o campo 'CodRed' será incrementado a

partir de 1001 até 1999. Quanto for 2, será incrementado a partir de

2001 até 2999, e assim sucessivamente.

neste caso, o campo CodRed não poderia ser auto-increment, ou seja, você deverá controlar seu incremento. Observando o critério que você mencionou - para cada IdGrupoConta.

Por exemplo, se fosse um incremento sequencial por IdGrupoConta, você faria um select obtendo o maior valor de CodRed para o IdGrupoConta em questão:

SELECT MAX(CodRed) CodRed
FROM GrupoContas WHERE IdGrupoConta = 2

supondo que o maior valor retornado fosse 53, você somaria 1 e teria o novo valor -> 54

No seu caso, poderíamos dizer que na primeira inclusão você teria 0 como resultado, mas como quer que comece em 2000, então bastaria gerar este valor com IdGrupoConta *1000 (isso resultaria em 2000) que somado ao 1, resultaria no primeiro valor com 2001.

Seria algo por ai. Variaria um pouco se você implementar isto no código Delphi ou no banco.

Dá pra implementar isso no MySQL?
acredito que você poderia utilizar uma trigger para isto, ou eventualmente em um procedure que seria chamada do programa.

Acho que vai depender de como você está trabalhando com sua aplicação.

Nosso colega Denis Courcy, pode ter mais informações a este respeito e, até mesmo, uma melhor sugestão.

Estou movendo para a sessão Banco de Dados->MySQL.

Abraços

Link para o comentário
Compartilhar em outros sites

  • 0

Oi, Antonio!

O que o Micheus falou está correto.

Para que você não precise se preocupar com a inclusão destes dados, criei uma trigger de inclusão de dados que implementa o auto_increment do jeito que você quer.

Segue o código abaixo:

DELIMITER $$;

DROP TRIGGER `test`.`TriggerIncl_PlanoContas`$$

CREATE TRIGGER `test`.`TriggerIncl_PlanoContas` BEFORE INSERT on `test`.`planocontas`
FOR EACH ROW BEGIN
   declare numero integer;

   Set numero = (select max(CodRed) From planocontas where idGrupoConta = new.idGrupoConta);

   if (numero <= 0) or (numero is null)then
      set numero = (new.idGrupoconta * 1000) + 1;
   else
      set numero = numero + 1;
   end if;
   set new.CodRed = numero;
END$$

DELIMITER;$$

Um abraço

Link para o comentário
Compartilhar em outros sites

  • 0

Caro Denis,

Não sei como agradecer....

Muito valiosa a sua ajuda.

Funcionou perfeitamente.

Grato,

Antonio.

Oi, Antonio!

O que o Micheus falou está correto.

Para que você não precise se preocupar com a inclusão destes dados, criei uma trigger de inclusão de dados que implementa o auto_increment do jeito que você quer.

Segue o código abaixo:

DELIMITER $$;

DROP TRIGGER `test`.`TriggerIncl_PlanoContas`$$

CREATE TRIGGER `test`.`TriggerIncl_PlanoContas` BEFORE INSERT on `test`.`planocontas`
FOR EACH ROW BEGIN
   declare numero integer;

   Set numero = (select max(CodRed) From planocontas where idGrupoConta = new.idGrupoConta);

   if (numero <= 0) or (numero is null)then
      set numero = (new.idGrupoconta * 1000) + 1;
   else
      set numero = numero + 1;
   end if;
   set new.CodRed = numero;
END$$

DELIMITER;$$

Um abraço

Link para o comentário
Compartilhar em outros sites

Visitante
Este tópico está impedido de receber novos posts.


  • Estatísticas dos Fóruns

    • Tópicos
      152,3k
    • Posts
      652,4k
×
×
  • Criar Novo...