Problemas com Filtro

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Edenilson Santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 10 Mar 2009 14:05
Localização: Edenilson Santos

Problemas com Filtro

Mensagem por Edenilson Santos »

Tenho uma base com 1/121790 registros armazenados e de vez em quando preciso filtrar algumas informações dessa base então o problema:
Utilizo Clipper 5.2e com Blinker 7 e indices CDX .
Este sistema trabalha hoje em +- 10 computadores em ambiente de rede local e o procedimento usando set filter fica extremamente lento e difícil de trabalhar gostaria de sabe se vc tem alguma solução para o meu caso para filtrar de outra forma tendo em vista q já andei dando uma olhada pela internet e vi um tal de sx_setscope ai olhei olhei e me parece q ele só funciona com indices SIX então pergunto é verdade tem alguma coisa q eu possa usar pra cdx ou se der pra usar o sx_setscope pra limitar o tamanho da minha base e depois usar set filter como eu faço isso de forma correta pra agilizar o processamento.


Tenho urgência na resolução deste problema se puder me auxiliar agradeço.


desde já agradeço


Edenilson Santos
E-mail/Msn: es.sistemas@terra.com.br
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Problemas com Filtro

Mensagem por alxsts »

Olá!

Seja bem-vindo ao forum!

Quando você usa este filtro (em um TBrowse, relatório)? Nunca utilizei a Six. Nâo sei como seria alterar o teu sistema para passar a utilizar. Certamente os colegas poderão te aconselhar melhor.

Quando trabalhava com Clipper, utilizava as rotinas do Stephen Straley. Elas são muito úteis em TBrowse pois você consegue definir os code blocks de goTop e goBottom do TBrowse como uma faixa do índice do teu arquivo de dados. Fica rápido.

Vamos aguardar. Se optar por esta solução, ainda tenho os fontes.
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Problemas com Filtro

Mensagem por gvc »

Como vc não especificou qual é a versão do clipper, vamos por partes.
Se vc esta usando o 5.3x, vc pode usar ordscope para montar o filtro por indice.

Se esta usando versão anterior, vc pode montar indices temporários para relatórios e pesquisas.
Não é uma boa prática, mas funciona.

Se é um critério fixo, vc pode mondar um indice usando FOR para fazer a filtragem já no indice.
index on <cheve> to <arquivo> for <condição>

Código: Selecionar todos

 Isto é do xHarbour, mas deve funcionar no 5.3x
// The example demonstrates evaluation of scope code blocks while a
// database is browsed. Although the code blocks return constant values,
// they could return the result of a function call as well.

   #include "Ord.ch"

   PROCEDURE Main
      USE Customer
      INDEX ON Upper(LastName+Firstname) TO Cust01

      OrdScope( TOPSCOPE   , {|| Tone(1000), "E" } )

      OrdScope( BOTTOMSCOPE, {|| Tone(500), "K" } )

      Browse()
   RETURN
"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
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Problemas com Filtro

Mensagem por alaminojunior »

gvc escreveu:Como vc não especificou qual é a versão do clipper
O colega usa a versão 5.2e com Blinker 7 e CDX.
Vejo duas possibilidades:
1º compilar com 5.3b que é a ultima versão, para poder usar o "Set Scope to" (fica um avião)
2º compilar com 5.2e mesmo, e utilizar a lib Six para usar as aclamadas funções desta RDD.

Como não conheço a Six, sugiro a 1ª opção, que é praticamente indolor. No caso precisaria apenas trocar o comando Set Filter por Set Scope, claro que estando a base indexada pela chave que se quer pesquisar e/ou escopar
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Edenilson Santos
Usuário Nível 1
Usuário Nível 1
Mensagens: 10
Registrado em: 10 Mar 2009 14:05
Localização: Edenilson Santos

Re: Problemas com Filtro

Mensagem por Edenilson Santos »

Olá amigo, como eu faço pra compilar em 5.3 é só mudar meu script , tentei mas deu vários erros de libs etc e tal... pode me dar uma ajuda
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Problemas com Filtro

Mensagem por alaminojunior »

Edenilson Santos escreveu:tentei mas deu vários erros de libs etc e tal
É, essa é a parte chata da coisa.
Mas por favor, poste o seu script atual para que possamos melhor auxiliar.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Problemas com Filtro

Mensagem por gvc »

[alaminojunior]
Desculpe-me. Eu li mas não vi.
- E não é que o cara tinha informado mesmo!!!

[Edenilson Santos]
1 - Vc tem que declarar a função main no seu sistema.
2 - Veja se esta faltando alguma lib. Informe, por favor.

Crie o "Ola, mundo" e compile para ver se esta funcionando a compilação e as lib´s.

Aproveitando para vender o peixe. Vc já pensou em usar o (x)Harbour? Ele tem tudo o que o 5.3x tem e mais algumas coisas. O BCC e o (x)Harbour são gratuitos. Compilação 32 bits. Classe win32prn (Impressão gráfica). Ordscope. Talvez o investimento valha para vc. Pense nisso.
"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
sygecom
Administrador
Administrador
Mensagens: 7131
Registrado em: 21 Jul 2006 10:12
Localização: Alvorada-RS
Contato:

Re: Problemas com Filtro

Mensagem por sygecom »

Concordo com o colega GVC, as mudanças para harbour são mínimas mesmo comparado a quantidade de ganho de recursos e melhorias, vale a pena tentar.
Leonardo Machado
xHarbour.org + Hwgui + PostgreSql
Avatar do usuário
Augusto
Usuário Nível 3
Usuário Nível 3
Mensagens: 473
Registrado em: 26 Ago 2003 17:50
Localização: Maricá/RJ
Contato:

Re: Problemas com Filtro

Mensagem por Augusto »

Edenilson,

É claro que existem "n" soluções para o seu caso mas... vou dizer prá vc como eu solucionava essa questão quando eu usava CLIPPER 5.3 + Blinker7 e mais... usava indice NTX.

Eu criava um DBF temporário e jogava prá dentro dele somente os registros que obedecessem o filtro (já indexados pela chave desejada) e na hora de usar o TBrowse ou qqr outra forma de "display" eu lia esse "temp"...

As funções CREATE e APPEND FROM são muito rápidas... mais rápidas que qqr SET FILTER
:xau Fui...
goulart@provsul.com.br

Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
Avatar do usuário
alaminojunior
Colaborador
Colaborador
Mensagens: 1717
Registrado em: 16 Dez 2005 21:26
Localização: Ubatuba - SP

Re: Problemas com Filtro

Mensagem por alaminojunior »

Augusto escreveu:Eu criava um DBF temporário e jogava prá dentro dele somente os registros que obedecessem o filtro (já indexados pela chave desejada) e na hora de usar o TBrowse ou qqr outra forma de "display" eu lia esse "temp"...

As funções CREATE e APPEND FROM são muito rápidas... mais rápidas que qqr SET FILTER
Está certíssimo, porém o Set Scope to da RDD CDX ou SIX é mais flexível que qualquer outra artimanha, pois imaginemos que esta tabela que o colega queira exibir, precise ser compartilhada com outros terminais !?
À propósito, quando eu usava Clipper 5.2 com NTX, eu recorria ao uso de índices condicionais (FOR), que mantinha as atualizações nas tabelas.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Problemas com Filtro

Mensagem por gvc »

[Augusto]
O problema de usar arquivo temporário é a atualização on-line dos arquivos originais.
Se isso não for problema então o indice com filtro é mais prático, usando 0 5.2x.
Com o ordscope, os dados são mantidos on-line para o usuário, mas só existe no 5.3x.

Ah! Eu tb uso dbf temporário para trabalhar com arquivos muito grandes, mas só no 5.2x.

[Edenilson Santos]
Aguardamos o colega responder se conseguiu resolver o problema.

Acho que ainda vou/vamos conseguir "vender" a idéia do [x]Harbour.
Trabalho com array maiores. Novos comando e funções. Sistemas maiores. Continue pensando, colega.
"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
billy1943
Usuário Nível 4
Usuário Nível 4
Mensagens: 570
Registrado em: 12 Mai 2009 17:33
Localização: Bauru-SP

Re: Problemas com Filtro

Mensagem por billy1943 »

Realmente, fica problemático usar filtro em um arquivo muito grande.

Vou apresentar uma solução "bolada" por um amigo meu, cujo trabalho envolve arquivos com milhões de registros.

1. É gerado um arquivo ordenado por um único campo, por exemplo (CNPJ/CPF), sem nenhum índice;
2. Obtem-se o total de registros do arquivo com LASTREC().
3. Aí é feito uma pesquisa para se saber se o registro desejado é maior que o registro que está no meio ( LASTREC()/2 )
4. Se ele estiver a procura vai ser na segunda metade e em caso contrário na primeira metade
5. Trabalha-se agora com essa metade, e se repete o processo, sempre procurando saber se o registro desejado está na primeira ou segunda metade.
6. Segundo o meu amigo, a procura é super rápida, bastando não se perder com os ponteiros que indicarão em que parte do arquivo a procura está focada.
7. A quantidade de iterações e o tempo gasto é proporcional ao número de registros do arquivo.

Fica aqui a sugestão !!!
O bom do computador é que ele resolve os problemas, sem nunca levantar nenhum.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
alxsts
Colaborador
Colaborador
Mensagens: 3092
Registrado em: 12 Ago 2008 15:50
Localização: São Paulo-SP-Brasil

Re: Problemas com Filtro

Mensagem por alxsts »

Olá!

O algoritmo citado existe há décadas. Particularmente o conheci mexendo com COBOL, no final dos anos 70. Nesta linguagem, é uma das técnicas de table handling (termo usado em COBOL para definir o que em Clipper chamamos de manipulação de arrays) e também é conhecido popularmente como pesquisa binária.
É fácil de construir e funciona como o colega descreveu. O único pré-requisito é que o array (no caso a lista de Recno() ) esteja ordenada de forma ascendente (para pesquisa ascendente) ou descendente para pesquisa descendente.
No caso de arrays, como o trabalho é feito em memória, o processo é muito rápido. Em Clipper temos que considerar o limite de 4096 elementos...
No exemplo citado pelo colega, a pesquisa é feita em disco. Aqui, temos que considerar o impacto de I/O...
[]´s
Alexandre Santos (AlxSts)
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: Problemas com Filtro

Mensagem por gvc »

[Edenilson Santos]

Agora eu entendi sua MP.
Aproveitando para vender o peixe. Vc já pensou em usar o [x]Harbour? Ele tem tudo o que o 5.3x tem e mais algumas coisas. O BCC e o [x]Harbour são gratuitos. Compilação 32 bits. Classe win32prn (Impressão gráfica). Ordscope. Talvez o investimento valha para vc. Pense nisso.
O curto, com esta acima, é o tempo para aprender a usar as novas ferramentas.
No inicio do tópico sobre o [x]Harbour tem como baixar e configurar a sua máquina para trabalhar com ele.
Alem disso, temos muita gente aqui que gosta de ajudar os companheiros. Eu inclusive.

Esse é o "peixe" que eu estou tentando te "vender", a idéia de mudar para algo que oferece mais opções de trabalho. Não tem custo nenhum da minha parte.

Se bem que tomar uma cervejinha com os amigos não tem preço. Mas cada um paga a sua e a amizade é a mesma. (eh. eh. eh.)
(Não vamos desviar o post, pois o Maligno esta sempre de olho) (eh. eh. eh. de novo!)
"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}
leandromiler
Usuário Nível 2
Usuário Nível 2
Mensagens: 55
Registrado em: 26 Nov 2009 08:38
Localização: Ribeirão Preto - SP
Contato:

Re: Problemas com Filtro

Mensagem por leandromiler »

Como você esta usando indices CDX com CLIPPER 5.2, entre no site www.vagucs.com.br e baixe a bibliotex da SIX, compile seu executável com a SIXLIB.CLD, e tire a dbfcdx.lib. E na abertura dos arquivos você abrirá os arquivos VIA 'SIXCDX', e tambem mude o nome do RDD para SIXCDX.

Feito isto, você poderá criar varios índices na abertura do sistema baseado nos filtros que você utiliza. fica extremamente rapido. eu usava o clipper 5.3b com CDX. mas voltei para 5.2e somente por causa da SIX. E não me arrependo.

Outra coisa é que nao vai dar pau quando o arquivo é muito grande, pois no clipper 5.3b com CDX, as vezes dava problema qdo um arquivo dbf era muito grande em determinados processos, do qual eu tinha que abaixar os registros das tabelas criando um sistema com dados antigos, só aí funcionava. Agora com SIX, meus problemas acabaram.

abraços.
Clipper 5.3b / CDX Nativo / Blinker 7

Ninguem sabe tanto que não possa aprender, e nem sabe tão pouco que não possa ensinar !!!
Responder