INDEX ON ... WHILE ...

Discussão sobre a biblioteca Fivewin - O Clipper para Windows.

Moderador: Moderadores

lenasi
Usuário Nível 1
Usuário Nível 1
Mensagens: 7
Registrado em: 02 Set 2004 10:20
Localização: Ferraz de Vasconcelos - SP

INDEX ON ... WHILE ...

Mensagem 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
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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 :?)
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
Avatar do usuário
ERASMO ANDRIOLI
Usuário Nível 2
Usuário Nível 2
Mensagens: 51
Registrado em: 15 Jul 2004 16:15
Localização: Sorriso-MT
Contato:

Mensagem 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 -:]
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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?
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Avatar do usuário
Maligno
Membro Master
Membro Master
Mensagens: 6398
Registrado em: 06 Jul 2004 01:40
Localização: Londrina/PR

Mensagem 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. :)
[]'s
Maligno
---
Não respondo questões técnicas através de MP ou eMail. Não insista.
As dúvidas devem ser postadas no fórum. Desta forma, todos poderão
se beneficiar das respostas.

---
Se um dia precisar de uma transfusão de sangue você perceberá como
é importante a figura do doador. Procure o hemocentro de sua cidade e
se informe sobre a doação de sangue, plaquetas e medula óssea. Doe!
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Mensagem 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.
"TRS-80/Sincler/Apple/PC - Clipper Winter 85, tlink 1.0 [pc 10 MHz - 640K] {NEZ 8000 2Kb RAM}"
{POG - Programação Orientada a Gambiarra}
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Mensagem 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.
OPS! LINK QUEBRADO? Veja ESTE TOPICO antes e caso não encontre ENVIE seu email com link do tópico para [url=mailto://fivolution@hotmail.com]fivolution@hotmail.com[/url]. Agradecido.

@braços : ? )

A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.
Responder