Página 1 de 1

Filtro com o setscope

Enviado: 20 Out 2004 17:04
por negrao
Moçada, preciso de uma grande ajuda de vcs.
Tenho varios registros que tem a seguinte informacao:
contax Contay
000001 000002
000007 000003
000004 000001
000002 000006

Bom, agora gostaria de filtrar todos os registros que tenham como conta o valor 2.Nao gostaria de usar o set filter, por ser muito lento.
O setscope viria muito bem acalhar, mas ele funciona atraves de indice, como deveria criar meu indice para essa situacao e como devo por no comando setscope para que ele mostre apenas os registros (1 e 4)

Muito obrigado

Enviado: 22 Out 2004 10:10
por Marcelo Guazi
Caro Amigo,

A algum tempo atras tive um problema semelhante e me foi enviada uma solucao pelo amigo Jorge Adourian, que estou repassando aqui agora.




******
INDEX ON PRODUTO TO arqtemp FOR NUM_PED==VNUM_PED

Porem, se você fizer isto terá um tempo muito grande para a criação deste índice.

A melhor solução é criar um índice temporário usando WHILE, assim:

arqtemp:=FILETEMP(...) (é uma função da CA-TOOLS 3)
SEEK VUM_PED
INDEX ON PRODUTO TO arqtemp WHILE NUM_PED==VNUM_PED

Neste caso a criação do índice é rapidíssima.

Naturalmente que isto só é necessário se você for usar um DBEDIT() para apresentar os registros na tela.

Porem se você apenas precisasse totalizar os produtos vendidos no Pedido selecionado e não precisasse mostrar nada na tela apenas o total, bastaria o seguinte sem o uso de índice temporário:

AUXTOT:=0
SEEK VNUM_PED
DO WHILE NUM_PED=VNUM_PED .AND. .NOT. EOF()
AUXTOT+=PRECO*QUANTIDADE
SKIP +1
ENDDO

Resumindo, em cada caso temos que decidir se usaremos um índice permanente ou um índice temporário, ou até mesmo não criar nem um nem outro, tudo depende do que se precisa fazer.
******

Espero ter ajudado

Marcelo.