Optimizando filtros

Optimizando filtros

Postby Loren » Tue Apr 27, 2010 7:07 am

Compañeros,

Estoy actualizando un proyecto que escribí hace más de 10 años e intentando optimizar los filtros ya que mi cliente me comenta que se ralentiza muchísimo cuando trabaja en red local.

El proyecto trabaja con DBF + NTX + ADS. El problema lo tengo con los filtros, que por entonces (hace más de 10 años) abusé de ellos y ahora me están "pasando factura".

Filtros de tipo:
Code: Select all  Expand view
set filter to albaclie->numero=nNUMALB .and. albaclie->fecha=dFECHA .and. albaclie->cliente=cCODCLI ; go top


estoy intentando optimizarlos a fin de mejorar los tiempos de espera, mediante:
cfiltr=¿? --> aquí tengo la duda, porque no consigo armar la "cadena" para crear el filtro porque existen campos numér,date y caracteres bfiltr="{||"+cfiltr+"}"
dbsetfilter(&bfiltr,cfiltr)

o bien mediante
albaclie->( AdsSetAOF( cfiltr ) )

¿ Sabeis como armar la cadena "cfiltr" teniendo en cuenta que existen campos numéricos, date y caracteres ?

Mil gracias.
LORENZO.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Optimizando filtros

Postby Loren » Tue Apr 27, 2010 3:51 pm

¿ Alguna sugerencia, por favor ?

Gracias.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España

Re: Optimizando filtros

Postby karinha » Tue Apr 27, 2010 3:56 pm

Hola,

Use ORDSCOPE() ó crea un Indice temporario.

Saludos.
João Santos - São Paulo - Brasil - Phone: +55(11)95150-7341
User avatar
karinha
 
Posts: 7343
Joined: Tue Dec 20, 2005 7:36 pm
Location: São Paulo - Brasil

Re: Optimizando filtros

Postby jcenteno » Tue Apr 27, 2010 4:33 pm

Loren,

SWITCH uVal
CASE "C"
cString += CHR(34)+UPPER(ALLTRIM(aGet[1,2]))+CHR(34); EXIT
CASE "N"
cString += STR(aGet[1,2],,,.t.) ; EXIT
CASE "D"
cString += "CTOD("+'"'+DTOC(aGet[1,2])+'")' ; EXIT
CASE "L"
cString += "."+ALLTRIM(aGet[1,2])+"."
END

IF ! HB_IsNull( cString ) //! EMPTY( cString )
cFilter := "'"+cString+"'"
TRY
(aFAlias[1,2])->( DbSetFilter( {||&cString}, cFilter ) )
CATCH oErr
lOk := FALSE
? "Caught:", oErr:Description
MsgInfo("Error de sintaxis, favor corrija")
oErr:Description
END
ENDIF

Espero te sirva.

Saludos. Jairo
jcenteno
 
Posts: 23
Joined: Thu Dec 10, 2009 6:07 am

Re: Optimizando filtros

Postby RenOmaS » Tue Apr 27, 2010 7:03 pm

set filter to albaclie->numero=nNUMALB .and. albaclie->fecha=dFECHA .and. albaclie->cliente=cCODCLI ; go top

cfiltr= "numero = " + Alltrim( Str( nNUMALB ) ) + " .and. fecha = " + DtoC( dFECHA ) + " .and. cliente = '" + cCODCLI + "'"
Saludos/regards
RenOmaS

skype: americo.balboa
User avatar
RenOmaS
 
Posts: 205
Joined: Fri Oct 07, 2005 5:07 pm

Re: Optimizando filtros

Postby Marcelo Via Giglio » Tue Apr 27, 2010 7:42 pm

Hola,

puedes utilizar SQL de ADS que internamente hace uso de los filtros

saludos

Marcelo
Marcelo Via Giglio
 
Posts: 1051
Joined: Fri Oct 07, 2005 3:33 pm
Location: Cochabamba - Bolivia

Re: Optimizando filtros

Postby acuellar » Tue Apr 27, 2010 9:57 pm

Loren usa OrdScope con Filter
Indexá por número
Code: Select all  Expand view

*set filter to albaclie->numero=nNUMALB .and. albaclie->fecha=dFECHA .and. albaclie->cliente=cCODCLI ; go top

OrdScope(0,nNUMALB);OrdScope(1,nNUMALB)
ALBACLIE->( dBSetFilter( { || (ALBACLIE->fecha=dFECHA  .AND. albaclie->cliente=cCODCLI ) } ) )
DbGoTop()
 

Si sigue lento asocia dos campos en el indice ya sea numero y fecha ó numero y cliente ó por último los tres y solo usas OrdScope.

Saludos

Adhemar
Saludos,

Adhemar C.
User avatar
acuellar
 
Posts: 1594
Joined: Tue Oct 28, 2008 6:26 pm
Location: Santa Cruz-Bolivia

Re: Optimizando filtros

Postby Loren » Tue May 04, 2010 12:23 pm

Compañeros,

aunque con mucho retraso, pero encontré la solución para combiar campos Numeric,Date y Character en un mismo filtro:

AdsClearAof()
cfiltr='alltrim(str(numalb))="'+alltrim(str(albaclie->numero))+'" .and. fecha="'+dtoc(albaclie->fecha)+'" .and. codcli="'+alltrim(albaclie->cliente)+'"'
albaran->(AdsSetAOF( cfiltr )) ; go top

Dando gracias a todos los compañeros que han aportado una luz a mis dudas, saluda
LORENZO.
Loren
 
Posts: 479
Joined: Fri Feb 16, 2007 10:29 am
Location: Cadiz - España


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: Google [Bot] and 51 guests