off topic : filtro aof() sobre fecha

off topic : filtro aof() sobre fecha

Postby astursoft » Tue Jan 03, 2006 9:24 pm

como se hace un filtro aof sobre fecha ?
supongamos :
Code: Select all  Expand view
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
User avatar
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby R.F. » Thu Jan 05, 2006 12:05 am

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  Expand view
dfecha:=date()-90
cfiltro:="facturas->fecha >="+ DTOS(dfecha)//<--- cambia aqui
bfiltro:=&("{||"+cfiltro+"}" )
facturas->(dbsetfilter(bfiltro,cfiltro))
Saludos
R.F.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby astursoft » Sat Jan 07, 2006 1:18 pm

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  Expand view

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
User avatar
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias

Postby R.F. » Sat Jan 07, 2006 10:16 pm

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.
R.F.
 
Posts: 840
Joined: Thu Oct 13, 2005 7:05 pm

Postby astursoft » Sun Jan 08, 2006 8:55 am

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
User avatar
astursoft
 
Posts: 139
Joined: Sun Nov 06, 2005 6:14 pm
Location: Asturias


Return to FiveWin para Harbour/xHarbour

Who is online

Users browsing this forum: No registered users and 141 guests