.... continuacion....
3 son las funciones que considero yo mas importantes para trabajar con CDX y esta son:
OrdKeyCount() : Me dice cuantos registros hay en un indice, aun si la base de datos esta filtrada, esto es maravilloso, es como un RECCOUNT() o LASTREC() con la diferencia que cuenta unicamente los registors que esten en el indice activo. Es muy util cuando la tabla dbf esta filtrada
OrdKeyNo(): me dice la posicion del registro CON RESPECTO AL INDICE, es como un RECNO() pero a diferencia de este, que me dice la posicion del registro con respecto a todos los registros de la base de datos, OrdKeyNo() me dice la posicon del registro con respecto al indice activo, asi pues si un registro me dice que el RECNO() es 1200 por ejemplo, quiza indexado ese registro queda en la primera posicion por lo que OrdKeyNo() me regresaria 1.
Y la estrella de nuestro espectaculo: OrdScope()
OrdScope() es sin duda la funcion mas util del mundo CDX, se utiliza para hacer filtros ULTRA RAPIDOS utilizando las llaves del indice activo, te evita tener que usar SET FILTER, copiar a archivos temporales, hacer busquedas sobre una base de datos vamos, usalo una vez y lo amaras siempre.
Vamos a suponer que nuestra base de datos clientes tiene 10 mil registros, y que a nosotros solo nos interesa ver aquellos clientes que se dieron de alta entre el 1reo. de Enero del 2006 y el 15 de Enero del 2006, , hacemos lo que sigue
SET DATE BRITISH
USE clientes
clientes-(ORDSETFOCUS("fecha"))
dFechIni := CTOD("01/01/2006")
dFechFin := CTOD("15/01/2006")
/* ahora la magia */
clientes->(ORDSCOPE(0,DTOS(dFechIni))
clientes->(ORDSCOPE(1,DTOS(dFechFin))
clientes->(DBGOTOP())
Y listo, con esas 3 sencilas lineas hemos filtardo nuestros 10 mil registros para que nos entregue unicamente aquellos que cumplan las fechas deseadas.
Este tipo de filtros es millones de veces mas rapido que el filtro de tradicional de clipper, ahora si nosotros preguntamos cuanto vale OrdKeyCount() nos dira el numero de registros exactos que se encuentran dentro de esta tabla filtrada.
OrdScope se tiene que ejecutar 2 veces, la primera para establecer el rango inferior que queremos buscar, para ello se identificara con el primer parametro como un "0", la segunda llamada para OrdScope, establece el valor del rango superior y lleva un"1", si se omite la segunda llamada, hara un filtro desde el primer valor que coincida con el rango inferior, hasta el final del archivo.
Para borrar un Scope y volver la tabla a estado original se hace:
OrdScope(0,NIL)
OrdScope(1,NIL)
DBGOTOP()
Un scopes SIEMPRE debe ir sobre un campo indexado, despues de apliar un scope a un ragno de datos, es posible aplicar un FILTRO con SET FILTER y funcionara mucho mas rapido que con el set filer tradicinal de Clipper.
FIN