Página 1 de 1

INDEX ON ... WHILE ...

Enviado: 23 Set 2004 16:17
por lenasi
Estou tentando usar o WHILE dentro do INDEX ON, de um exemplo chamado while2.prg que peguei, e adaptando no meu programa não está dando certo. É o seguinte?

A partir de dois COMBOBOX, selecionado um item de cada:
COMBO A E COMBO B

Não ficaria assim ?

SEEK COMBO_A
INDEX ON F_DESCRI TO ARQTMP WHILE ( F_CODREC=COMBO_A .AND. F_CODMED=COMBO_B )

Mas aparece somente os registros conforme o COMBO_A
Preciso que mostre registros referente os dois itens selecionados no COMBOBOX

Enviado: 19 Nov 2004 23:10
por rochinha
Amiguinho

Afinal voce quer filtra quais dados

Se voce quer ver dados que contenham F_CODREC e F_CODMED deverá usar .OR. pois o resultado devolvido será F_CODREC ou F_CODMED.

@braços :?)

Enviado: 25 Ago 2005 10:15
por gvc
Se vc quer que esse indíce temporário mostre apenas os registros que
contém f_codrec iguais a combo_a e combo_b use FOR e não WHILE.

O WHILE vai indexar os registro a partir da posição e o FOR vai filtrar desde o ínicio do arquivo.

então o seu comando ficaria:

index on f_descri to arqtmp FOR f_codrec = combo_a .AND. f_codrec = combo_b

Enviado: 25 Ago 2005 10:22
por gvc
Desculpe o erro.

index on f_descri to arqtmp FOR f_codrec = combo_a .OR. f_codrec = combo_b

se colocar o .AND. o campo f_codrec necessita ter o valor combo_a e combo_b ao mesmo tempo, o que é impossível se combo_a e combo_b forem valores diferentes.
Com o .OR. ele pode ter o valor combo_a ou combo_b para que a condição seja verdadeira.

Enviado: 12 Fev 2008 23:01
por ERASMO ANDRIOLI
CARA!!!

Essa resposta meu tirou de uma enrascada...

e olha que ela é uma resposta bem antiga...

Eu usava o set filter e meu sistema estava muitissimo lento...

agora ele ficou a jato...

Abraços -:]

Enviado: 12 Fev 2008 23:26
por Maligno
Uai! Mas a expressão inicial continha dois códigos: CODREC e CODMED:

index on f_descri to arqtmp while ( f_codrec=combo_a .and. f_codmed=combo_b )

O colega GVC eliminou o segundo código, o que justifica realmente o uso de .OR. e não .AND.:

index on f_descri to arqtmp for f_codrec = combo_a .or. f_codrec = combo_b

Não está errado?

Enviado: 12 Fev 2008 23:29
por rochinha
Amiguinhos

Sempre fui adepto do recurso que a SubNTX provia, mas isto quando usava Clipper e depois em ClipperXFivewin.

Quando passei a usar Harbour, não foi mais possivel usar a SubNTX e passei então a usar CDX e me batia para fazer algo parecido com a SubNTX usando indices condicionais.

Quebrou um galho mas os arquivinhos temporarios gerados eram demais.

Procurei outra forma que foi com o uso do recurso SetScope() e todo o problema acabou.

Hoje uso SetScope() em tabelas gigantescas, depois ainda posso usar o Set Filter no registros filtrados e tudo ficou super bala.

Se vcs ainda usam indices condicionais e não fizeram uso do potencial deste recurso, vão em frente, testem e me digam se não foi legal.

Enviado: 12 Fev 2008 23:39
por Maligno
Legal não. Eu diria super-legal. Índices ao estilo CDX, que contém esse recurso de limitação de escopo, permitem uma aceleração drástica do SET FILTER, mesmo em arquivos gigantescos. É ver pra crer. :)

Enviado: 13 Fev 2008 09:46
por gvc
Maligno escreveu:Uai! Mas a expressão inicial continha dois códigos: CODREC e CODMED:

index on f_descri to arqtmp while ( f_codrec=combo_a .and. f_codmed=combo_b )

O colega GVC eliminou o segundo código, o que justifica realmente o uso de .OR. e não .AND.:

index on f_descri to arqtmp for f_codrec = combo_a .or. f_codrec = combo_b

Não está errado?
Realmente cometi o crime. Mea culpa. Mestre Maligno esta certo. Mas o FOR para criar indices condicionais funcionam.
O setscope só funciona em CDX. Ou melhor (antes de cometer outro crime) Não funcionam em NTX.

Enviado: 13 Fev 2008 12:19
por rochinha
Amiguinhos

No caso de ainda usarem NTX o método de escopos pode ser conseguido usando-se a SubNTX, acho até que na sessão download do PCToledo e no site do Maligno voce as encontre.

Caso não me mandem um email com numero da conta e senha(oopssss!) com assunto SUBNTX para irochinha@itelefonica.com.br que devolverei com prazer.