Página 1 de 1

Selecionar registros com quantidade > 0

Enviado: 31 Jan 2011 23:53
por Ricardo Sales Ribeiro
Boa Noite amigos

Estou com um problema, e gostaria da ajuda de vcs. é o seguinte:

Tenho uma aplicação q mostra no video lançamentos. cujo campo tipo é igual a 1,2 e 3, e tem quantidade ok.
Então, preciso mostrar para o cliente apenas os registros não zerados do tipo 1 e 3, os do tipo 2 podem ser mostrado zerados.
Não queria usar a função Set Filter to porque qdo o arquivo estiver muito gde, vai demorar para fazer o processo e mostrar.
Não sei como fazer, e gostaria da ajuda dos amigos.

Gde abraço

Re: Selecionar registros com quantidade > 0

Enviado: 01 Fev 2011 06:37
por ANDRIL
Voce pode criar um arquivo de indice temporario para esta tarefa, assim evita o uso de SET FILTER TO. Supondo que voce usara o resultado em um DbEdit() ou TBrowse().

Segue o codigo

Código: Selecionar todos

*--abre o seu dbf
USE meudbf SHARED

*-cria o arquivo de indice temporario apenas para esta tarefa
INDEX ON tipo TO meuidx.ntx FOR tipo=1.AND.qtd>0 .OR. tipo=3.AND.qtd>0 . OR. tipo=2
GO TOP
DbEdit()

*-fecha os arquivos caso seja necessario no seu codigo
CLOSE

*- apaga o indice temporario
Ferase("meuidx.ntx")
Uma vez tendo o arquivo de indice voce podera gerar um relatorio em txt tambem, atraves de uma rotina de impressao.

Espero que te ajude a clariar as idéias.

Abraços.

Re: Selecionar registros com quantidade > 0

Enviado: 01 Fev 2011 08:56
por pena
o problema na sugestão acima, é que se apagar o arquivo temporário, irá ficar lento tb a rotina, pq tera que criar o indice a cada vez que acessar a rotina

Re: Selecionar registros com quantidade > 0

Enviado: 01 Fev 2011 09:57
por gvc
Vc pode criar um arquivo de indice como o [ANDRIL] postou, mas deixando-o permanente.
Como vc não deu maiores informações, estou entendendo que todos os registros do seu aquivo que atendam ao filtro que vc apresentou devem aparecer para o usuário.
Isso tb resolve o problema de atualização por outra estação de trabalho.

Re: Selecionar registros com quantidade > 0

Enviado: 01 Fev 2011 10:33
por ANDRIL
Pena, esta solução é simplesmente uma forma nativa, visto que não sabemos se utiliza outra biblioteca de indices como SIX, por exemplo, onde tem funções mais elaboradas para filtros.

Visto ter que criar o indice todas as vezes que for rodar a rotina, voce tem razao, porem o uso do filtro usando INDEX mesmo em ambiente de rede tem velocidade superior ao SET FILTER TO, e mais, ao exibir o resultado no DbEdit() por exemplo, não fica lento na paginação ao contrário o que o ocorre no FILTER.

Abraços.

Re: Selecionar registros com quantidade > 0

Enviado: 01 Fev 2011 10:52
por pena
Correto Andril, eu particularmente nunca uso o set filter, é muito mais lento do que criar um indice, ainda mais na rede, como vc disse, acho que nada que alguns testes de performance para decidir qual caminho tomar.

Um abraço

Re: Selecionar registros com quantidade > 0

Enviado: 03 Fev 2011 16:47
por Ricardo Sales Ribeiro
Olá Galera

Obrigado pelas ajudas, vou sim fzer meus testes aqui, acho q vai dar certo, criando o indice temporario para esse fim, só q vou deixar permanente, ou seja qdo for acionada essa função de exibir, aí o indice já estar pronto.
Vai fazer parte dos outros indices q utilizo para outras funções.

Valeu
Obrigado!

Selecionar registros com quantidade > 0

Enviado: 03 Fev 2011 17:56
por Pablo César
só q vou deixar permanente, ou seja qdo for acionada essa função de exibir, aí o indice já estar pronto
Tá certo ! É o que ia falar... se essa exibição é quase frequente, compensa manter mais um índice.