Scope y Filtros

Post Reply
Databaselab2002
Posts: 142
Joined: Sun Oct 09, 2005 1:36 am

Scope y Filtros

Post by Databaselab2002 »

Estimados Colegas

Quiero hacer un scope y dentro del mismo filtrar hasta ahora
el scope me funciona perfecto, lo que no me funciona es
el filter que en vez de hacerlo sobre el scope los hace
sobre la dbf entera y me tarda un tiempo enorme ya que
son 500000 registros, si alguien me puede orientar
que estoy haciendo mal.

desde ya muchisimas gracias
databaselab2002@yahoo.com


#include "FiveWin.ch"
#include "ord.ch" // do clipper (CDX)

REQUEST DBFCDX

//----------------------------------------------------------------------------//

function Main()

SET _3DLOOK ON
rddSetDefault("DBFCDX")
USE MD
MD->(ORDLISTADD("MDL"))

MD->( OrdScope( 0,"AGRELO"))
MD->( OrdScope( 1,"AGRELO"))
MD->( dbGoTop())
* SET FILTER to upper( MD->PER_NOMBRE ) $ "CATAL"
SET FILTER to "CATAL" $ upper( MD->PER_NOMBRE )
// PROBE SET FILTER DE LAS DOS MANERAS
*MD->( dbGotop())

***********************************************************

Browse()

USE

return nil

User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

¿Porque no utilizas un índice temporal?

Si quieres un ejemplo dime el nombre del campo por el que está indexado el fichero índice.


Manuel
Databaselab2002
Posts: 142
Joined: Sun Oct 09, 2005 1:36 am

Scopes y Filtros

Post by Databaselab2002 »

Gracias Manuel

Se puede crear un indice temporal con operador $

ej index on clientes-> Nombre to Nombre for/while Nombre $ "Catal"

La idea es crear un indice temporal con los datos del scope que el
campo nombre contenga "Catal" en cualquier sector del mismo

desde ya muchisimas gracias
Fabian
Databaselab2002@yahoo.com.ar
User avatar
Manuel Valdenebro
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España

Post by Manuel Valdenebro »

Supongo que tenemos el fichero clientes.dbf indexado por el campo Nombre. Queremos buscar una palabra que esté en cualquier sitio del registro:

ERASE iTem.cdx
INDEX ON clientes->NOMBRE TO iTem FOR "Catal" $ clientes->NOMBRE
SET INDEX TO iTem, clientes

Esto será lento (mucho mas si está en red).

Lo que no comprendo es como en tu primer mensaje ponias un Scope en "Agrelo".


Un saludo
Post Reply