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
ORDSCOPE
Moderador: Moderadores
-
MARCELOG
- Usuário Nível 4

- Mensagens: 546
- Registrado em: 15 Mar 2005 16:54
- Localização: Divinópolis/MG
ORDSCOPE
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.
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.
Re: ORDSCOPE
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.
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.
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()
RETURNIsso 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}
{POG - Programação Orientada a Gambiarra}
- alaminojunior
- Colaborador

- Mensagens: 1717
- Registrado em: 16 Dez 2005 21:26
- Localização: Ubatuba - SP
Re: ORDSCOPE
Contribuindo...
Caso não precisemos usar nenhum bloco de código, podemos utilizar o comando:
é 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:
Uma observação legal é: sempre após a definição do escopo chamar a função DbGoTop(), pois o ponteiro fica meio malucão.
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 TOCompilador xHarbour 1.2.3 + Embarcadero C++ 7.30
MySQL c/ SQLRDD
HwGui + GTWVG
MySQL c/ SQLRDD
HwGui + GTWVG
- rochinha
- Administrador

- Mensagens: 4664
- Registrado em: 18 Ago 2003 20:43
- Localização: São Paulo - Brasil
- Contato:
Re: ORDSCOPE
Amiguinhos,
TopScope tem valor 0
BottomScope tem valor 1
Portanto:
Ou:
Ou:
Em OrdScope() voce deverá informar o conteudo com as mesmas caracteristicas da chave que foi criada na indice.
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
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
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
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.
@braços : ? )
A justiça divina tarda mas não falha, enquanto que a justiça dos homens falha porque tarda.