ORDSCOPE

Projeto [x]Harbour - Compilador de código aberto compatível com o Clipper.

Moderador: Moderadores

MARCELOG
Usuário Nível 4
Usuário Nível 4
Mensagens: 546
Registrado em: 15 Mar 2005 16:54
Localização: Divinópolis/MG

ORDSCOPE

Mensagem por MARCELOG »

Olá amigos,

Percorrendo a net, deparei-me com a função ordscope que, de acordo com a declaração, faz filtro em indices cdx, com uso das cláusulas topscope e bottomscope.

Como o xharbour tem rdd cdx nativo pensei: __ legal ! meus filtros ficarão bem mais rápidos!

Entretanto, segundo a homepage, a função funciona assim:

alias -> ordscope(topscope,?)
alias -> ordscope(bottomscope,?)

Onde ? é a chave.

Contudo, não funciona.

O xharbour, apesar de compilar normalmente o programa apresenta erro run time, indicando que a variável não existe:
topscope ou bottomscope.

Alguém pode me ajudar?

Obrigado.

MGS
Editado pela última vez por Pablo César em 07 Jan 2011 12:50, em um total de 1 vez.
Razão: Mensagem editada para formatação de texto em letras minúsculas. Evite postar mensagens com texto TOTALMENTE EM LETRAS MAIÚSCULAS.<br>Veja as Regras do Fórum:<br>7 - Mensagens em letras MAIÚSCULAS poderão ser editadas sem aviso prévio.
Avatar do usuário
gvc
Colaborador
Colaborador
Mensagens: 1270
Registrado em: 23 Ago 2005 10:57

Re: ORDSCOPE

Mensagem por gvc »

Só para esclarecer e tirar esse do 0 respostas.

Com o ordscope vc vai usar a chave do indice para fazer o filtro. Por isso o filtro é mais rápido.

Código: Selecionar todos

 #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
TOPSCOPE e BOTTOMSCOPE são constantes declaradas em ORD.CH e correspondem a 0 e 1.
Isso informa qual é o inicio e o fim do filtro.
"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: ORDSCOPE

Mensagem por alaminojunior »

Contribuindo...
Caso não precisemos usar nenhum bloco de código, podemos utilizar o comando:

Código: Selecionar todos

SET SCOPE TO "E","K"

é um pouco mais prático que a forma funcional, pois nela precisamos chamar a função duas vezes para definir o escopo desejado.
e para sair do filtro:

Código: Selecionar todos

SET SCOPE TO
Uma observação legal é: sempre após a definição do escopo chamar a função DbGoTop(), pois o ponteiro fica meio malucão.
Compilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
Avatar do usuário
rochinha
Administrador
Administrador
Mensagens: 4664
Registrado em: 18 Ago 2003 20:43
Localização: São Paulo - Brasil
Contato:

Re: ORDSCOPE

Mensagem por rochinha »

Amiguinhos,

TopScope tem valor 0
BottomScope tem valor 1

Portanto:

Código: Selecionar todos

    if ! file( "Cust02.cdx" )
        INDEX ON FirstName+LastName TO Cust01
    endif
    ...
    OrdScope( 0 , "E" )
    OrdScope( 1 ,  "K" )
    Browse()
    RETURN
Ou:

Código: Selecionar todos

    if ! file( "Cust01.cdx" )
        INDEX ON StrZero(CodCliente,5) TO Cust01
    endif
    ...
    nCodCliente := 45
    ...
    OrdScope( 0 , StrZero(nCodcliente,5) )
    OrdScope( 1 , StrZero(nCodcliente,5) )
    Browse()
    RETURN
Ou:

Código: Selecionar todos

    if ! file( "Cust01.cdx" )
        INDEX ON StrZero(CodCliente,5) TO Cust01
    endif
    ...
    nCodClienteIni := 45
    nCodClienteFim := 50
    ...
    OrdScope( 0 , StrZero(nCodclienteIni,5) )
    OrdScope( 1 , StrZero(nCodclienteFim,5) )
    Browse()
    RETURN
Em OrdScope() voce deverá informar o conteudo com as mesmas caracteristicas da chave que foi criada na indice.
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