In order for this site to work correctly we need to store a small file (called a cookie) on your computer. Most every site in the world does this, however since the 25th of May 2011, by law we have to get your permission first. Please abandon the forum if you disagree.

Para que este foro funcione correctamente es necesario guardar un pequeño fichero (llamado cookie) en su ordenador. La mayoría de los sitios de Internet lo hacen, no obstante desde el 25 de Marzo de 2011 y por ley, necesitamos de su permiso con antelación. Abandone este foro si no está conforme.

armar string para filtro

Foro de Xailer profesional en español
Responder
Estudio Informatico S
Mensajes: 26
Registrado: Sab Mar 13, 2010 4:51 pm

armar string para filtro

Mensaje por Estudio Informatico S »

Hola
estoy tratatando de armar el string para realizar un filtro
Tengo una tabla Novedades.dbf con los siguientes campos
legajo ,c,9
fecha ,date
tengo tres variables
n_legajo c,9
desde, date
hasta date
la idea es filtrar la tabla novedades con la siguiente expresión
legajo=n_legajo .and. fecha>=desde .and. fecha<=hasta
hemos probado un monton de cosas pero no logramos escribir la expresión completa y que ande el filtro
Gracias
Xevi
Mensajes: 1706
Registrado: Jue Sep 08, 2005 12:58 pm

armar string para filtro

Mensaje por Xevi »

La cadena debe ser TODA tipo string, y lo que debes de tener precaución es
en la comparación de tipos.
"legajo = Val(" + Str(n_legajo) + ") .and. fecha >= CtoD(" + DtoC(desde) +
") .and. fecha<= CtoD(" + DtoC(hasta) +")"
Un Saludo,
Xevi.
"Estudio Informatico Sur" <estudioinformaticosur[at]gmail[dot]com> escribió
en el mensaje de noticias:4cbde883$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola
> estoy tratatando de armar el string para realizar un filtro
>
> Tengo una tabla Novedades.dbf con los siguientes campos
>
> legajo ,c,9
> fecha ,date
>
> tengo tres variables
>
> n_legajo c,9
> desde, date
> hasta date
>
> la idea es filtrar la tabla novedades con la siguiente
> expresión
>
> legajo=n_legajo .and. fecha>=desde .and. fecha<=hasta
>
> hemos probado un monton de cosas pero no logramos escribir
> la expresión completa y que ande el filtro
>
> Gracias
>
>
>
>
>
>
>
>
> __________ Informaci�n de ESET NOD32 Antivirus, versi�n de la base de
> firmas de virus 5546 (20101019) __________
>
> ESET NOD32 Antivirus ha comprobado este mensaje.
>
> http://www.eset.com
>
>
>
__________ Información de ESET NOD32 Antivirus, versión de la base de firmas de virus 5546 (20101019) __________
ESET NOD32 Antivirus ha comprobado este mensaje.
http://www.eset.com
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

armar string para filtro

Mensaje por ignacio »

Estudio,
Depende de como esté aplicando el filtro. Si utiliza el comando SET FILTER,
necesariamente deberá crear las variables del tipo PRIVATE para que pueda
resolverlas el RDD. Algo así­:
PRIVATE n_legajo, desde, hasta
n_legajo := ...
desde := ...
hasta := ...
SET FILTER TO legajo=n_legajo .and. fecha>=desde .and. fecha<=hasta
Piense que realmente el comando lo que hace es convertir en un 'code block'
la expresión que usted indica.
POR EL CONTRARIO:
Si está utilizando el método TDbfDataset:SetFilter() tenga en cuenta que
dicho método recibe siempre una cadena y por lo tanto la expresión que antes
se ha indicado no es válida. La solución consiste en convertir la expresión
en cadena quitandose de paso las referencias a las variables, como le ha
comentado Xevi.
Como observará las referencias a las variables ya no existen en la cadena
resultante lo cual es muy recomendable sobre todo cuando se utliza con ADS
ya que ello permite que el filtro se resuelva completamente en el servidor
que es infinitamente más rápido.
Un saludo,
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Estudio Informatico Sur" <estudioinformaticosur[at]gmail[dot]com> escribió
en el mensaje de noticias:4cbde883$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola
> estoy tratatando de armar el string para realizar un filtro
>
> Tengo una tabla Novedades.dbf con los siguientes campos
>
> legajo ,c,9
> fecha ,date
>
> tengo tres variables
>
> n_legajo c,9
> desde, date
> hasta date
>
> la idea es filtrar la tabla novedades con la siguiente
> expresión
>
> legajo=n_legajo .and. fecha>=desde .and. fecha<=hasta
>
> hemos probado un monton de cosas pero no logramos escribir
> la expresión completa y que ande el filtro
>
> Gracias
>
>
>
>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Estudio Informatico S
Mensajes: 26
Registrado: Sab Mar 13, 2010 4:51 pm

armar string para filtro

Mensaje por Estudio Informatico S »

Hola
Aca sigo de nuevo probando pero no hay caso
no funciono lo que me envio
hice un proyecto pequeño con la tabla
en el ejemplo este deberia el filtro ser
nro_docum es char
legajo es char
fecha n_desde n_hasta tipo date
nro_docum=legajo.and.fecha<=n_desde.and.fecha>=n_hasta
probe separando los filtros
el filtro colocando solo la fecha da error base/1119 argument error ctod en modulo errorsys 0
PARA PROBAR en la ejecucion
desde : 1/05/2010 HASTA: 31/05/2010 LEGAJO : 12179683
Gracias y saludos



Attached files filtro.rar (10.5 KB)Â
Avatar de Usuario
ignacio
Site Admin
Mensajes: 9441
Registrado: Lun Abr 06, 2015 8:00 pm
Ubicación: Madrid, Spain
Contactar:

armar string para filtro

Mensaje por ignacio »

Estudio,
Para crear una cadena de texto deberí­a haber usado Dtoc() y no Ctod().
Le recomiendo que primero cree la cadena del filtro, muestrela con
logdebug() para comprobar que es correcta y luego se la suministra al
filtro.
Saludos
--
Ignacio Ortiz de Zúñiga
[Equipo de Xailer / Xailer team]
http://www.xailer.com
http://www.xailer.info
http://www.xailer.com/forum
http://www.xailer.com/dokuwiki
"Estudio Informatico Sur" <estudioinformaticosur[at]gmail[dot]com> escribió
en el mensaje de noticias:4cbf3278$[email=1@svctag-j7w3v3j....]1@svctag-j7w3v3j....[/email]
> Hola
> Aca sigo de nuevo probando pero no hay caso
> no funciono lo que me envio
>
> hice un proyecto pequeíƒÂ±o con la tabla
> en el ejemplo este deberia el filtro ser
>
> nro_docum es char
> legajo es char
> fecha n_desde n_hasta tipo date
>
> nro_docum=legajo.and.fecha<=n_desde.and.fecha>=n_hasta
>
> probe separando los filtros
>
> el filtro colocando solo la fecha da error base/1119
> argument error ctod en modulo errorsys 0
>
> PARA PROBAR en la ejecucion
>
> desde : 1/05/2010 HASTA: 31/05/2010 LEGAJO : 12179683
>
> Gracias y saludos
>
>
>
>
>
>
>
>
>
>
>
Ignacio Ortiz de Zúñiga
[OZ Software]
https://www.ozs.es
--
[Equipo de Xailer / Xailer team]
https://www.xailer.com
Estudio Informatico S
Mensajes: 26
Registrado: Sab Mar 13, 2010 4:51 pm

armar string para filtro

Mensaje por Estudio Informatico S »

Por fin anduvo el filtro
cambio los nomnbres para que concuerden con el proyecto que habia enviado
Para resumir:
TABLA campos:
numero_doc,c,9
fecha, date
Vbles:
legajo c,9
n_desde, date
n_hasta date
para el filtro tratando de armar un string y usar el filter la
expresion debe escribirse asi:
"val(nro_docum) = " + legajo +" .AND. fecha >= CtoD('" + DtoC(n_desde) +"') .and. fecha<= CtoD('" + DtoC(n_hasta) +"')"
::odbfnov:filter("val(nro_docum) = " + legajo +" .AND. fecha >= CtoD('" + DtoC(n_desde) +"') .and. fecha<= CtoD('" + DtoC(n_hasta) +"')",.t.,.t.)
esto anduvo ok
Lo que no entiendo si me lo pueden expicar y me gustaria saber como funciona es lo siguiente
nro_docum es char
legajo es char
si hago "val(nro_docum)= "+legajo el string resultante seria:

val(nro_docum)=199999
y 199999 es char (No lo entiendo ) o hay alguna conversion ?
Gracias
Responder