Scope y Filtros

Scope y Filtros

Postby Databaselab2002 » Sun Nov 20, 2005 9:16 pm

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


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

Postby Manuel Valdenebro » Mon Nov 21, 2005 5:07 am

¿Porque no utilizas un índice temporal?

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


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

Scopes y Filtros

Postby Databaselab2002 » Mon Nov 21, 2005 1:32 pm

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
Databaselab2002
 
Posts: 142
Joined: Sun Oct 09, 2005 1:36 am

Postby Manuel Valdenebro » Mon Nov 21, 2005 10:55 pm

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
User avatar
Manuel Valdenebro
 
Posts: 706
Joined: Thu Oct 06, 2005 9:57 pm
Location: Málaga-España


Return to FiveWin para CA-Clipper

Who is online

Users browsing this forum: No registered users and 9 guests