Ajuda com Auto-Incremento

Discussão em 'Progress 4GL' iniciado por Rogerio, Abril 22, 2010.

  1. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Galera eu to precisando fazer um cadastro e nele a cada novo ele deve pegar o ultimo codigo e incrementar um, como faço isso???

    Seria algo do tipo:

    FIND LAST cad-desenho NO-LOCK NO-ERROR.
    ASSIGN i-aux = cad.desenho.codigo .
    create cad-desenho.
    cad-desenho.codigo = i-aux + 1.

    Como faço isso sendo que estou usando uma SmartViewer!!!!!
  2. kirchner

    kirchner Membro Participativo Moderador

    Rogerio,

    Para fazer isto em progress você deve usar uma sequência. A ideia é semelhante a que você mostrou, mas a sequencia garante que não serão gerados valores duplicados.
    Aquele teu código irá gerar valores duplicados se for executado simultaneamente em mais de uma sessão.

    Você cria a sequencia e faz algo assim:
    Código:
    DEF VAR cod AS INT.
    ASSIGN cod = NEXT-VAL(nome_sequencia).
    Não sei fazer isto em SmartViewer, mas você pode fazer uma trigger e colocar o código lá, por exemplo.
  3. Cobra.cne

    Cobra.cne Equipe de Suporte Moderador

    Olá,

    Geralmente a utilização da sequence sempre é recomendada na trigger de create.
    Exemplo:
    Código:
    TRIGGER PROCEDURE FOR CREATE OF tabela.
    ASSIGN tabela.campochave = NEXT-VAL(nome_sequencia).
    Para evitar furos na sequência de gravação.

    Mas é possível utilizar este mesmo comando em qualquer lugar do código, o problema, é que se o usuário cancelar, esta sequência será perdida.

    T+
  4. Rogerio

    Rogerio Moderator Moderador Equipe de Suporte

    Mas eu colocando na trigger, o usuario não consegue visualizar o numero do codigo antes de gravar o registro. eu preciso informar o codigo antes de gravar o registro
  5. kirchner

    kirchner Membro Participativo Moderador

    Neste caso você tem que aceitar "furos" na numeração, não há outra forma.
    Porque quando você gera o número e mostra para o usuário, não tem certeza se ele vai concluir a transação ou não...

    Pode usar a sequência da mesma forma, gera o número com NEXT-VAL e mostra pro usuário. Ainda assim é garantido que o número será único.
  6. mcarril

    mcarril Membro Participativo

    Pode-se colocar o sequence como atributo na criação do campo no banco de dados... é um campo novo ?

    Para evitar duplicidades o campo tem que ser chave primária e "única" da tabela, caso contrário os programas tem que tratar o lock de registro, todas as vezes e em todos os lugares que for acessado o campo...

Compartilhe esta Página