Assign ? Melhor Performance ou Confiabilidade ?
Nos dias de hoje é mais raro encontrarmos programas sem ASSIGN, mas sempre aparece um ou outro, diante disso ai vai me dica.
Porque usar o ASSIGN ?
Essa é uma questão que praticamente todos os novatos no mundo Progress fazem. E confesso a vocês que já me fiz algumas vezes essa questão.
Muitos argumentam a questão de performance, e isso realmente é verdade o assign é mais performatico pois faz apenas uma transação para cada variavel. Explicarei isso em outro artigo.
O mais importante agora é mostrar que a falta do ASSIGN pode causar erros de programação quando estamos alterando a chave de uma tabela que seja única.
Vamos supor que temos uma tabela tt-teste onde a chave primária e unica é composta de 3 campos.
DEFINE TEMP-TABLE tt-teste2
FIELD a AS INTEGER
FIELD b AS INTEGER
FIELD c AS INTEGER
INDEX ch-pri AS PRIMARY UNIQUE a b c .
Agora vamos criar dois registros nessa tabela.
CREATE tt-teste2.
tt-teste2.a = 4.
tt-teste2.b = 0.
tt-teste2.c = 1.
CREATE tt-teste2.
tt-teste2.a = 4.
tt-teste2.b = 1.
tt-teste2.c = 1.
Como ultimo passo vamos alterar o ultimo registro da tabela conforme abaixo:
FIND FIRST tt-teste2 WHERE tt-teste2.a = 4 AND
tt-teste2.b = 1 AND
tt-teste2.c = 1 NO-ERROR.
IF AVAIL tt-teste2 THEN
DO:
tt-teste2.b = 0
tt-teste2.c = 2.
END.
Executem esse código para entender melhor as vantagens do assign.
Percebam que o código perde a confiabilidade.
Agora executem o mesmo código utilizando assign.
FIND FIRST tt-teste2 WHERE tt-teste2.a = 4 AND
tt-teste2.b = 1 AND
tt-teste2.c = 1 NO-ERROR.
IF AVAIL tt-teste2 THEN
DO:
ASSIGN tt-teste2.b = 0
tt-teste2.c = 2.
END.
Reparem que o código funciona perfeitamente.
FOR EACH tt-teste2.
DISP tt-teste2.
END.
Espero ter ajudado pessoal.
Abraço e até a próxima.