Problemas com Filtro
Moderador: Moderadores
-
Edenilson Santos
- Usuário Nível 1

- Mensagens: 10
- Registrado em: 10 Mar 2009 14:05
- Localização: Edenilson Santos
Problemas com Filtro
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
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

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Problemas com Filtro
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.
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)
Alexandre Santos (AlxSts)
Re: Problemas com Filtro
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>
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}
{POG - Programação Orientada a Gambiarra}
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Problemas com Filtro
O colega usa a versão 5.2e com Blinker 7 e CDX.gvc escreveu:Como vc não especificou qual é a versão do clipper
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
MySQL c/ SQLRDD
HwGui + GTWVG
-
Edenilson Santos
- Usuário Nível 1

- Mensagens: 10
- Registrado em: 10 Mar 2009 14:05
- Localização: Edenilson Santos
Re: Problemas com Filtro
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
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Problemas com Filtro
É, essa é a parte chata da coisa.Edenilson Santos escreveu:tentei mas deu vários erros de libs etc e tal
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
MySQL c/ SQLRDD
HwGui + GTWVG
Re: Problemas com Filtro
[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.
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}
{POG - Programação Orientada a Gambiarra}
- sygecom
- Administrador

- Mensagens: 7131
- Registrado em: 21 Jul 2006 10:12
- Localização: Alvorada-RS
- Contato:
Re: Problemas com Filtro
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
xHarbour.org + Hwgui + PostgreSql
- Augusto
- Usuário Nível 3

- Mensagens: 473
- Registrado em: 26 Ago 2003 17:50
- Localização: Maricá/RJ
- Contato:
Re: Problemas com Filtro
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
É 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
goulart@provsul.com.br
Faça da PROVSUL o seu Provedor de Serviços WEB
Visite: www.PROVSUL.com.br
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: Problemas com Filtro
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 !?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
À 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
MySQL c/ SQLRDD
HwGui + GTWVG
Re: Problemas com Filtro
[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.
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}
{POG - Programação Orientada a Gambiarra}
Re: Problemas com Filtro
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 !!!
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.
Hoje atuo mais com Clipper 52E, e um pouquinho com XHarbour.
-
alxsts
- Colaborador

- Mensagens: 3092
- Registrado em: 12 Ago 2008 15:50
- Localização: São Paulo-SP-Brasil
Re: Problemas com Filtro
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...
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)
Alexandre Santos (AlxSts)
Re: Problemas com Filtro
[Edenilson Santos]
Agora eu entendi sua MP.
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!)
Agora eu entendi sua MP.
O curto, com esta acima, é o tempo para aprender a usar as novas ferramentas.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.
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}
{POG - Programação Orientada a Gambiarra}
-
leandromiler
- 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
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.
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 !!!
Ninguem sabe tanto que não possa aprender, e nem sabe tão pouco que não possa ensinar !!!
