Autor Tópico: Pegar a sequencial de um campo com sequencia automática  (Lida 264 vezes)

HGL

  • Intermediário
  • ***
  • Mensagens: 165
  • Certifique-se de que você pratica o que prega.
    • HGL Tecnologia
Pegar a sequencial de um campo com sequencia automática
« Online: Junho 20, 2016, 09:08:55 pm »
Olá pessoal!

Estou com uma situação que preciso de ajuda:

Tenho um cadastro de produtos onde tenho um código (PK) e um código sequencial (configurado para gerar sequencia automática).

Preciso fazer o seguinte:

Se o código (PK) estiver vazio, assuma o código sequencial.

Alguém tem alguma ideia?

Desde já agradeço!

robertobru

  • Intermediário
  • ***
  • Mensagens: 224
    • Email
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #1 Online: Junho 21, 2016, 07:37:13 am »
Talvez a macro do SC abaixo resolva.
sc_set_global($variavel_01) ou ({Meu_Campo})

Haroldo

  • Expert
  • *****
  • Mensagens: 6276
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #2 Online: Junho 21, 2016, 07:44:29 am »
crie uma trigger no banco para a tabela em questão before insert

if (new.chave_pk is null or new.chave_pk= '' or new.chave_pk=0)
then
   Select Max(sequencial+1) into  new.chave_pk from tabela;
end if;



Jailton

  • Expert
  • *****
  • Mensagens: 2038
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #3 Online: Junho 21, 2016, 09:43:16 am »
Esse TRIGGER que uso para multi-empresas pode dar uma LUZ:

AUTO INCREMENTO COM CHAVE COMPOSTO TIPA MULTI-EMPRESAS QUE TEM A EMPRESA E O AUTO INCREMENTO EM OUTRO CAMPO
TEM QUE CRIAR TRIGGER

leitores = tabela
BibliotecaID = campo inteiro que é a bilblioteca
CodigoLeitorID = Cada leitor dentro de cada biblioteca em sequência.

Chaves Primarias = BibliotecaID e CodigoLeitorID


DELIMITER $$

CREATE TRIGGER Trigger_leitores_CodigoLeitorID BEFORE INSERT on leitores

FOR EACH ROW
BEGIN
   declare Novo_CodigoLeitorID integer;
   Set Novo_CodigoLeitorID = (select max(CodigoLeitorID) from leitores where BibliotecaID = new.BibliotecaID);
   if (Novo_CodigoLeitorID <= 0) or (Novo_CodigoLeitorID is null) then
      set Novo_CodigoLeitorID = 1;
   else
      set Novo_CodigoLeitorID = Novo_CodigoLeitorID + 1;
   end if;
   set new.CodigoLeitorID = Novo_CodigoLeitorID;
END $$
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

Haroldo

  • Expert
  • *****
  • Mensagens: 6276
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #4 Online: Junho 21, 2016, 09:49:01 am »
nos próximos posts, Jailton, não vou me dar nem o trabalho de responder e solicito lhe procurar, rs...

tenho por hábito treinar as pessoas a pensarem, e quando alguém já esta interagindo a um tópico eu só interfiro em caso do tópico se estender muito sem uma solução aceitável para quem postou, e percebi que você vive rebatendo respostas já dadas.

ta na hora de eu descansar um pouco mesmo.


Jailton

  • Expert
  • *****
  • Mensagens: 2038
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #5 Online: Junho 21, 2016, 10:33:40 am »
nos próximos posts, Jailton, não vou me dar nem o trabalho de responder e solicito lhe procurar, rs...

tenho por hábito treinar as pessoas a pensarem, e quando alguém já esta interagindo a um tópico eu só interfiro em caso do tópico se estender muito sem uma solução aceitável para quem postou, e percebi que você vive rebatendo respostas já dadas.

ta na hora de eu descansar um pouco mesmo.



Quem esta usando tópico tem o direito de escolher analisar interagir com o que for mais prático, para ela tanto seu, meu retorno, ou de outros amigos, é mais uma opção a mais, a pessoa pega
'analisa' e usa o que desejar.

Tem gente que compra a ferramenta e nem é programador, meus retornos e seus também, servem para eles depois que visitam o fórum, tipo uma Wiki.

Se você clicar em Iniciar e olhar embaixo do lado esquerdo 'olhe' o tanto de gente que acessa o fórum só para ler e pegar coisas já prontas, e ai ai que meus Posts mais completos entram.

Crie suas soluções de forma rápida e inovadora reduzindo o tempo de desenvolvimento em até 80%.
« Última modificação: Junho 21, 2016, 10:36:59 am por Jailton »
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

HGL

  • Intermediário
  • ***
  • Mensagens: 165
  • Certifique-se de que você pratica o que prega.
    • HGL Tecnologia
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #6 Online: Junho 21, 2016, 10:39:58 am »
Olá!

Eu poderia usar a macro sc_select com um MAX no select e colocar em uma variável e atribuí-la ao campo?

if (empty({CampoCodigo})) {
   $Seq = sc_select("SELECT MAX(campo) + 1 from tabela)
{

{CampoCodigo} = $Seq

Colocaria esta instrução no Before insert.

Gostaria de uma opinião dos colegas para ver se isso estaria correto.

Haroldo

  • Expert
  • *****
  • Mensagens: 6276
  • Conhecimento diminui limitações.△TFA△
    • Infinitus Web Gestão Empresarial/Gestão ITIL/Consultoria Scriptcase
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #7 Online: Junho 21, 2016, 10:44:39 am »
Boa sorte Colega.
nos próximos posts, Jailton, não vou me dar nem o trabalho de responder e solicito lhe procurar, rs...

tenho por hábito treinar as pessoas a pensarem, e quando alguém já esta interagindo a um tópico eu só interfiro em caso do tópico se estender muito sem uma solução aceitável para quem postou, e percebi que você vive rebatendo respostas já dadas.

ta na hora de eu descansar um pouco mesmo.



Quem esta usando tópico tem o direito de escolher analisar interagir com o que for mais prático, para ela tanto seu, meu retorno, ou de outros amigos, é mais uma opção a mais, a pessoa pega
'analisa' e usa o que desejar.

Tem gente que compra a ferramenta e nem é programador, meus retornos e seus também, servem para eles depois que visitam o fórum, tipo uma Wiki.

Se você clicar em Iniciar e olhar embaixo do lado esquerdo 'olhe' o tanto de gente que acessa o fórum só para ler e pegar coisas já prontas, e ai ai que meus Posts mais completos entram.

Crie suas soluções de forma rápida e inovadora reduzindo o tempo de desenvolvimento em até 80%.

Jailton

  • Expert
  • *****
  • Mensagens: 2038
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #8 Online: Junho 21, 2016, 11:44:12 am »
Olá!

Eu poderia usar a macro sc_select com um MAX no select e colocar em uma variável e atribuí-la ao campo?

if (empty({CampoCodigo})) {
   $Seq = sc_select("SELECT MAX(campo) + 1 from tabela)
{

{CampoCodigo} = $Seq

Colocaria esta instrução no Before insert.

Gostaria de uma opinião dos colegas para ver se isso estaria correto.


Correto, pode ser fazer isso também, ou um Trigger igual ao Haroldo, passou.

Não use a variável $Seq, por ela ser curta pode interferir em alguma rotinha comando/interno reservado, use: $SequenciaNro ou $Seq_x.
O Princípio da Vibração. "Nada está parado, tudo se move, tudo vibra". Caibalion.

HGL

  • Intermediário
  • ***
  • Mensagens: 165
  • Certifique-se de que você pratica o que prega.
    • HGL Tecnologia
Re:Pegar a sequencial de um campo com sequencia automática
« Responder #9 Online: Junho 21, 2016, 05:06:12 pm »
Obrigado pelas dicas!

Irei efetuar os testes e retornarei.