Filtrar por 4 campos (fecha inicio, fecha fin, y otros dos campos)

Tengo un código donde filtro por 3 campos de la BD, pero cuando quiero crear otro filtro que lo haga con 4 campos NO me deja, al dar clic en el botin donde tengo el código me marca el error: "Expretion not valid", pongo los dos ejemplos haber si alguien me ayuda a detectar el problema

POR 3 CAMPOS (SI ME FUNCIONA):

ate ld_fec1, ld_fec2
string ls_nombre
ld_fec1 = date(em_3.text)
ld_fec2 = date(em_4.text)
dw_1.setfilter ("fecha >= date('" + string(ld_fec1) + "') and fecha <= date('" + string(ld_fec2) + "')
And string(usuario) ='"+ trim(ddlb_user.text)+"'")
dw_1.filter()
dw_1.settransobject(sqlca)
dw_1.retrieve(ld_fec1,ld_fec2)
dw_1.setsort("fecha, id")
dw_1.sort()

FILTRO POR 4 CAMPOS (NO FUNCIONA):

dw_1.setfilter ("fecha >= date('" + string(ld_fec3) + "') and fecha <= date('" + string(ld_fec4) + "')
And string(usuario) ='"+ trim(ddlb_user.text)+") And string(tipo_tram) ='"+
trim(ddlb_tipo_tram.text)+"'")

Respuesta
1

Prueba ordenando tu código

string ls_filter
date ld_fec1, ld_fec2
ld_fec1 = date(em_3.text)
ld_fec2 = date(em_4.text)
ls_filter =" (Fecha >= date('"+em_3.text+"') AND Fecha <= date('"+em_4.text+"'))"
ls_filter += " AND STRING(usuario) ='"+ TRIM(ddlb_user.text)+"'"
ls_filter += " AND STRING(tipo_tram) ='"+ TRIM(ddlb_tipo_tram.text)+"'"
dw_1.setredraw( false)
dw_1.setfilter (ls_filter)
dw_1.filter()
dw_1.setredraw( true)
dw_1.settransobject(sqlca)
dw_1.retrieve(ld_fec1,ld_fec2)
dw_1.setsort("fecha, id")
dw_1.sort()

:

1 respuesta más de otro experto

Respuesta
1

Tienes error de sintaxis por ello el mensaje de error al procesar el filter, basándome en lo que envías con 4 parámetros debería quedar así:

dw_1.setfilter ("fecha >= date(' "  + string(ld_fec3) + " ') and fecha <= date(' " + string(ld_fec4) + " ') And string(usuario) = ' " + trim(ddlb_user.text)+ " ' And string(tipo_tram) =' " +  trim(ddlb_tipo_tram.text)+" ' ")

Aqui el error:

And string(usuario) =' "+ trim(ddlb_user.text) + " ) And

And string(usuario) =' "+ trim(ddlb_user.text) + " ' And

muchas gracias, con tu corrección ya no me mostró el error, pero al ejecutarlo no me carga ningún registro (cuando si los tengo), crees que tenga otro problema el código?

en mi botón tengo así:

date ld_fec1, ld_fec2
ld_fec1 = date(em_3.text)
ld_fec2 = date(em_4.text)
dw_1.setfilter ("fecha >= date(' "  + string(ld_fec1) + " ') and fecha <= date(' " + string(ld_fec2) + " ') And string(usuario) = ' " + trim(ddlb_user.text)+ " ' And string(tipo_tram) =' " +  trim(ddlb_tipo_tram.text)+" ' ")
dw_1.filter()
dw_1.settransobject(sqlca)
dw_1.retrieve(ld_fec1,ld_fec2)
dw_1.setsort("fecha, id")
dw_1.sort()

Fijate en la conversión de la fecha a string, veo que usas ld_fec1 e imagino que es una variable de tipo date, si en la base el campo fecha es date debería arrojarte información, pero si es datetime deberías convertir a ese mismo tipo para evitar errores de conversión.

El campo es DATE, pero curiosamente cuando ejecuto mi código no me carga datos, aún cuando estoy seguro que sí hay datos en mi BD que cumplen las características de lo que estoy filtrando.

¿En debug que valor te asigna a las variables de tipo date?

Disculpa no tengo mucho tiempo de experiencia en power builder, no se como se hace eso?

Utilizo Sql anywhere que viene con power builder, no sera que no soporta el filtrado por 4 campos? porque probe en otro programita que tengo y hace lo mismo, no filtra,  pero por 3 campos si filtra...

la otra cosa que intente es filtrar por 3 campos, y posteriormente con los datos en pantalla aplicar el otro filtro, pero no me deja, porque vuelve a buscar en toda la BD y no solamente en los datos cargados con el filtro anterior,  ejemplo:

FILTRO POR TRES CAMPOS: 

dw_1.setfilter ("fecha >= date('" + string(ld_fec1) + "') and fecha <= date('" + string(ld_fec2) + "')
And string(usuario) ='"+ trim(ddlb_user.text)+"'")

DESPUÉS EN OTRO BOTÓN PONGO ESTE FILTRO: 

dw_1.setfilter("tipo_tram like '%"+ sle_tipo_tram +"%'")
dw_1.filter()
dw_1.sort()

Prueba poniendo las fechas en el filter y mira si te devuelve resultados.

dw_1.setfilter ("fecha >= '2017/01/01' and fecha <= '2017/12/31"')

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas