OrdScope vs filter

Post Reply
Verhoven
Posts: 435
Joined: Sun Oct 09, 2005 7:23 pm

OrdScope vs filter

Post by Verhoven »

Tengo entendido que con el uso de los scopes es más rápido realizar filtrados de bases de datos grandes, lo cual se convierte en especialmente necesario en caso de trabajar en red.

Alguien podría darme unas instrucciones de como acometer la sustitución de los filter por los scope.

Gracias.
User avatar
omarelunico
Posts: 33
Joined: Sun May 14, 2006 7:31 am
Location: Lima - Perú

Re: OrdScope vs filter

Post by omarelunico »

La sintaxis es sencilla.
Tabla tiene que estas ordenado por el campo que tu deseas, luego aplicas lo siguiente. en este ejemplo el filtro lo hace
por el campo donde los valores son 04 hasta 06
La tabla es la siguiente y esta ordenado en base a campo2
index on campo2 TAG ordenar

campo1 campo2 campo3
juan 04 Uruguay
pedro 03 España
enrique 01 Brasil
Ramiro 06 Chile
Carlos 05 Perú

si aplico ordscope
Tabla->(OrdScope(TOPSCOPE,"04") )
Tabla->(OrdScope(BOTTOMSCOPE,"06") )

solo saldrán en los resultados
juan 04 Uruguay
Carlos 05 Perú
Ramiro 06 Chile


Este ejemplo es lo mas básico , yo trabajo con tablas que alcanzan casi el millón de registros, y me va bien con esta
sentencia, ordscope es muy rápido.
derpipu
Posts: 93
Joined: Tue Mar 28, 2006 4:09 pm
Location: Tequila, Jalisco Mexico
Contact:

Re: OrdScope vs filter

Post by derpipu »

Hola a todos, voy a hacer una pequeña colaboracion con experiencias personales...

Yo dure mucho tiempo tratando de usar scopes, pero al final no los aplicaba porque no entendia el como hacer un rango compuesto, ahh ademas de comprender el que es mejor y mas rapido cuando nuestros scopes se hagan conforme al orden de nuestros indices

por ejemplo tengo un movtos.dbf y algunos de sus campos son idcliente, fechacompra, etc., por lo cual mi indice seria algo asi como dtos(fechacompra)+idcliente

si quiero hacer un scope compuesto haria algo asi mas o menos

obvio en mi programa donde filtraria dicha informacion usaria un dialog que me solicitara los rangos por ejemplos dfinicial, dffinal, cidcteini, cidctefin, donde los dos primeros son campo fecha y los dos ultimos son character

por lo cual quedaria algo asi

cScopeIni := dtos(dfinicial)+cidcteini
cScopeFin := dtos(dffinal)+cidctefin

y ahora si la magia

movtos->(OrdScope(0,cScopeIni), OrdScope(1,cScopeFin), gotop() )

y al finalizar nuestro proceso inicializamos a nil los ordscope()

movtos->(OrdScope(0,NIL), OrdScope(1,NIL), gotop() )

RECUERDEN QUE ES MUCHO MEJOR CUANDO EL ORDEN DEL CSCOPEINI Y CSCOPEFIN ES ACORDE AL ORDEN DE NUESTRO INDICE ACTIVO...

Espero que les sirva de algo...

P.D. y SCOPE es exponencialmente mas rapido que usar FILTER y que filtrar rapido mediante descartar registros dentro un DO WHILE basados en una condicion con skip(): loop

Saludos
Luis Fernando Rubio Rubio
Post Reply