off topic : filtro aof() sobre fecha

Post Reply
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

off topic : filtro aof() sobre fecha

Post by astursoft »

como se hace un filtro aof sobre fecha ?
supongamos :

Code: Select all

dfecha:=date()-90
cfiltro:="facturas->fecha >="+dtoc(dfecha)
bfiltro:=&("{||"+cfiltro+"}" )
facturas->(dbsetfilter(bfiltro,cfiltro))
no me funciona en xharbour y ads , ¿donde está el fallo ?
Jose Luis Parajón
Asturias
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Claro que no funciona

las fechas dentro del DBF se almacenan como aaaammdd (no existen los separadores)

Para que un campo fecha quede indexado correctamente siempre se debe indexar sobre DTOS(campo fecha)

Tu problema consiste en que la conversion para el filtro esta mal hecha

Debe ser

Code: Select all

dfecha:=date()-90
cfiltro:="facturas->fecha >="+ DTOS(dfecha)//<--- cambia aqui
bfiltro:=&("{||"+cfiltro+"}" )
facturas->(dbsetfilter(bfiltro,cfiltro)) 
Saludos
R.F.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Siempre se aprende algo nuevo :D :D
De momento la solución de cambiar los indices a dtos(dFecha) , no es viable , por compatibilidad ( programas clipper de años atras ) , pero lo he resuelto
asi

Code: Select all


dfecha:=date()-90
cfiltro:="facturas->fecha >=ctod('"+dtoc(dfecha)+"')"
bfiltro:=&("{||"+cfiltro+"}" )
facturas->(dbsetfilter(bfiltro,cfiltro)) 
funcionar funciona, pero no se si con filtro aof optimizado .
Gracias por el tip anterior pues lo tendre en cuenta de ahora en adelante .
Saludos
Jose Luis Parajón
Asturias
R.F.
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Post by R.F. »

Jejeje, pues va a ser que no es un AOF.

Recuerda: lo que estás haciendo es un FILTRO, no un SCOPE, por lo tanto puedes utilizar el DTOS() tranquilamente en vez del DTOC(), ten en cuenta que el FILTRO no requiere del INDICE para nada.

Si estuvieras haciendo SCOPE, entonces si tendrias que tener indexado sobre DTOS, pero como no lo es, el truco del DTOS() en la expresion te vale para filtrar correctamente.
Saludos
R.F.
User avatar
astursoft
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Post by astursoft »

Rene , pues con dtos(dfecha) no me funciona el filtro ¿? :( :( , me sale que no existen resultados para la expresion (hago un dbgotop() , y el registro es el eof() ) .
Por otra parte revisando la ayuda de advantage en la seccion aof encontre esto :

For example, consider the filter expression:

hiredate > CTOD(‘1/19/90’) .OR. ( hiredate > CTOD(‘1/18/85’) .AND. deptnum = 15)

If field "hiredate" is indexed and field "deptnum" is not, the expression will be partially optimized. Each simple expression involving field "hiredate" will be fully optimized but the simple expression involving field "deptnum" will not be optimized. The expression can be viewed as:

Full .OR. (Full .AND. Not Optimized)

según lo que pone parece como que en este caso los indices no fueran dtos(dfecha) , y pone que está optimizado ¿? .

:shock: :shock:
Sigo sin aclararme demasiado .
saludso y gracias por perder el tiempo conmigo.
Jose Luis Parajón
Asturias
Post Reply