Página 1 de 1

ORDSCOPE

Enviado: 18 Mai 2005 19:44
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

Re: ORDSCOPE

Enviado: 07 Jan 2011 12:24
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.

Re: ORDSCOPE

Enviado: 07 Jan 2011 19:40
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.

Re: ORDSCOPE

Enviado: 08 Jan 2011 12:40
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.