Tenho um requerimento de um cliente, que é assim: Tem um certo campo "CODIGO", onde ele quer que o usuário não possa adicionar um código repetido, isto é, que já exista no banco de dados. A linha é assim:
@ 10, 10 GGET cCODIGO PICTURE "@!" VALID ! Empty(cCODIGO) MESSAGE "Informe o codigo (obrigatório)"
então, o que eu fiz: criei uma função
FUNCTION CodigoExiste(codigo)
nAreaAntiga := Select()
DbSelectArea("Produtos")
dbseek(codigo)
achou := found()
Select(nAreaAntiga )
return achou
e coloquei no VALID:
@ 10, 10 GGET cCODIGO PICTURE "@!" VALID ! Empty(cCODIGO) .and. !CodigoExiste(cCODIGO);
MESSAGE "Informe o codigo (obrigatório)"
A função está sendo chamada direitinho, mas deu um problema de indices. Daà descobri que o programador anterior não criou Ãndices para o campo CODIGO (criou para outros campos), por isso provavelmente o dbseek nem funciona nesse caso.
Como é uma tabela grande, e locate é inviável, preciso criar um indice para usar apenas nesse trecho de código. E tem que ser de um jeito mais ou menos assim:
1) Guardar indice atual
2) Usar novo indice
3) restaurar indice antigo quando acabar de usar
Isso porque é um sistema existente e complexo, então não posso correr o risco de não de colocar de volta o indice anterior. Viram como salvei a area antiga e depois restaurei? parecido...
Agradeço antecipadamente!