Filtragem e Sx_SetScope

Fórum sobre a linguagem CA-Clipper.

Moderador: Moderadores

Avatar do usuário
Anderson J. Freitas
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 19 Fev 2005 10:34
Localização: Caratinga-MG

Filtragem e Sx_SetScope

Mensagem por Anderson J. Freitas »

Olá!

Tenho dois bancos de dados, um com a capa da nota fiscal(numero,fornecedor,valor) e outro com os itens da nota (codigo,produto,quantidade...). No sistema é apresentado uma função estilo o browse, onde pode-se navegar pelas notas registradas. Ao pressionar enter sobre uma determinada nota, abre-se um segundo browse com os itens da nota selecionada. Usei o sx_setscope e set filter to para filtrar os dados, funcionou porém ficou lento porque o bando de dados dos itens tem 70.000 registros. Pergunto :

1 - Existe alguma outra função que trabalhe com sx_setscope e que seja semelhante ao set filter de forma que filtragem de dados fique mais rápida ?
2 - Se eu usar o sx_setscope antes de um laço de repetição e depois usá-lo dentro do laço, tenho que usar sx_clrscope antes da segunda chamada ?

Grato

select corpo
sx_settag('A')
sx_setscope(0,entrada->loja+entrada->numero+entrada->fornece)
sx_setscope(1,entrada->loja+entrada->numero+entrada->fornece)
set filter to entrada->loja+entrada->numero+entrada->fornece=loja+nota+clifor
sx_settag('K')
go top
do while !saip
select corpo
sx_settag('A')
sx_setscope(0,entrada->loja+entrada->numero+entrada->fornece)
sx_setscope(1,entrada->loja+entrada->numero+entrada->fornece)
set filter to entrada->loja+entrada->numero+entrada->fornece=loja+nota+clifor
sx_settag('K')
go top
Pitbull

Clipper 5.2e, Exospace, Six2, DBMax
Alessandro
Usuário Nível 3
Usuário Nível 3
Mensagens: 141
Registrado em: 07 Jul 2004 09:39
Localização: Santo Antonio da Platina-PR

Mensagem por Alessandro »

Anderson,

Aconselho vc não utilizar o set filter, experimente carregar uam array com os itens, ou um arquivo temporário.
Com array fica bem mais simples e vai ficar rápido.

Beleza...
Avatar do usuário
Anderson J. Freitas
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 19 Fev 2005 10:34
Localização: Caratinga-MG

Filtragem e Sx_SetScope

Mensagem por Anderson J. Freitas »

Agradeço a sugestão mas um array ou banco temporário seria inviável, pois o banco do corpo é aberto o dia inteiro para inclusão de dados. E certa de 4000 inclusões por dia. Eu citei 70.000 registros, só que este é apenas de uma loja (4 ao todo).
Pitbull

Clipper 5.2e, Exospace, Six2, DBMax
Jorge Adourian
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 05 Jul 2004 23:38
Localização: São Paulo-SP-Brasil
Contato:

Mensagem por Jorge Adourian »

Anderson, você pode explicar para que usou SX_SETSCOPE() junto com o SET FILTER ??????????????????????????????????????
Até...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Avatar do usuário
Trazom
Usuário Nível 3
Usuário Nível 3
Mensagens: 277
Registrado em: 14 Ago 2003 01:01
Localização: Maceió/AL

Mensagem por Trazom »

perguntou o que não tive coragem

é, porque ?
Imagem

Harbour 3.2 HMG 1.2a NSX
Evandro
Pelo fato de exercitar bem a própria arte,
cada um pretendia ser sapientíssimo também nas
outras coisas de maior importância,
e esse erro obscurecia o seu saber

Platão, Apologia de Sócrates
Avatar do usuário
Anderson J. Freitas
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 19 Fev 2005 10:34
Localização: Caratinga-MG

Mensagem por Anderson J. Freitas »

Segui a sugestão do Maligno posta no caminho abaixo :

https://pctoledo.org/forum/viewto ... t=setscope
Pitbull

Clipper 5.2e, Exospace, Six2, DBMax
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Anderson Bom Dia !!
Antes do Sx_SetScope()
Adicione um dbseek ou seek para localizar a expressão.

dbssek(entrada->loja+entrada->numero+entrada->fornece)

Se for criar outro filtro vc tem q executar o sx_clrscope()
Sx_ClrScope(0)
Sx_ClrScope(1)

Uma dúvida pq vc depois ao criar um filtro com uma ordem vc muda ?
SX_settag("A")
// Vc Filtra...
//depois vc muda a ordem
SX_SetTag("K")


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Avatar do usuário
Anderson J. Freitas
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 19 Fev 2005 10:34
Localização: Caratinga-MG

Mensagem por Anderson J. Freitas »

É, agora que caiu a ficha, não precisa mudar a ordem pois o início dos índices (que entram no filtro) são iguais "loja+numero+fornece"
Pitbull

Clipper 5.2e, Exospace, Six2, DBMax
Jorge Adourian
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 05 Jul 2004 23:38
Localização: São Paulo-SP-Brasil
Contato:

Mensagem por Jorge Adourian »

Dudu:

Desculpe mas preciso corrigir uma informação sua.

Não precisa dar SEEK antes do SCOPE pois de nada adianta, o que você deve fazer é dar um GOTOP após o SCOPE para ativar o filtro.

Poderia usar o SEEK para decidir se filtra por SCOPE ou não. Aí tem sentido usar o SEEK.

Para trocar um filtro de SCOPE por outro não precisa limpar, apenas setar o novo e GOTOP para ativar o filtro.


Anderson:

IMPORTANTE: o SCOPE vale apenas para a ORDER atual se você muda de ORDER o SCOPE não vale mais, ou seja, tem que setar o SCOPE para cada ORDER que precisar filtrar.

Se você ler bem a dica do Maligno, ele diz que a dupla SX_SETSCOPE() e SET FILTER é muito agil no que eu concordo totalmente. Porém usar o FILTER para uma filtragem complementar ao SCOPE e não com a mesma condição como você fez. No seu caso não precisa do FILTER e sim apenas do SCOPE.

Outra coisa, usar no TAG uma letra como você fez, é perder legibilidade, use mnemônicos que indiquem a chave de indexação.
Até...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Avatar do usuário
Anderson J. Freitas
Usuário Nível 1
Usuário Nível 1
Mensagens: 46
Registrado em: 19 Fev 2005 10:34
Localização: Caratinga-MG

Mensagem por Anderson J. Freitas »

:))

Muito obrigado a todos, agora a filtragem funcionou q uma beleza. Algumas linhas a mais e o negócio parecia uma carroça, "programação é ingrata mesmo, mas vale a pena", principalmente quando tem gente disposta a ajudar.

Mais duas dúvidas:

1 - O Jorge citou q não tenho q limpar a filtragem somente setá-la em caso de uma nova filtragem, como assim, digitar o sx_setscope novamente ou é outro comando/função ?
2 - Quando faço uma pesquisa no banco, tenho que mudar a ordem porque ele busca por loja+codigo e exibe na tela loja+recno(), tenho que realizar o filtro novamente ?
Pitbull

Clipper 5.2e, Exospace, Six2, DBMax
Jorge Adourian
Usuário Nível 2
Usuário Nível 2
Mensagens: 95
Registrado em: 05 Jul 2004 23:38
Localização: São Paulo-SP-Brasil
Contato:

Mensagem por Jorge Adourian »

Anderson, para mudar de um filtro para outro é só usar outro SX_SETSCOPE(), e no final, para deixar sem filtro, aí sim use o SX_CLRSCOPE().

Se precisar mudar de order, tudo bem quando voltar a order original o filtro estará ativado como você deixou ele só é desativado por SX_CLRSCOPE() ou eventualmente ao reabrir o arquivo.

Quanto ao TAG o que eu disse antes não é obrigatório, apenas seria o ideal.
Até...
Jorge Adourian
Clipper5.2e, Blinker7.0, SIX2(NSX), ADS7.1, FW2.3c, PrintFile2.1.5 e PDFCreator0.8.0(2)
Dudu_XBase
Membro Master
Membro Master
Mensagens: 1071
Registrado em: 25 Ago 2003 16:55

Mensagem por Dudu_XBase »

Vlw Jorge Pela Informação eu uso assim desde o Antigo Fórum qdo migrei para o SIXNSX o Junior Prado na época me deu diversos toque q até hj eu uso. Como até hj nunca tive problemas....nunca desconfiei...
-:]


________________________________________________________________________________________________________
(Aow Saudade) Clipper 5.2e, Blinker 7, RDD SIXNSX, DBFCDX /Xharbour 1.0, Rdd Mediator (Mysql) Free , RDD Sqlrdd (Sql Server) Comercial
(Hoje) C# Python Sql Server e Oracle




Responder