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.
OrdScope vs filter
- omarelunico
- Posts: 33
- Joined: Sun May 14, 2006 7:31 am
- Location: Lima - Perú
Re: OrdScope vs filter
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.
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.
Re: OrdScope vs filter
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
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