Hacer un filltro en power builder

Lo que quiero hacer es un filtro yo ya lo he hecho pero no me sale como yo quiero que sea, este es mi código esta en el evento other del sle_1 cuando le doy enter se ejecuta (me filtra por cod_cliente)
Mi tabla "clientes" y sus campos (cod_cliente, nombre, dirección, nombre, teléfono)
if wparam=13 then
string busca
busca="upper(cod_cliente) like '" + (sle_1.text) + "'"
dw_1.setfilter( busca)
dw_1.retrieve( )
if dw_1.rowcount( )=0 then
    messagebox("Mensaje","El cliente no existe")
    dw_1.setfilter( "")
    dw_1.retrieve( )
end if
end if
Mi tabla cliente esta en un datawindows tipo grid y tengo un sle_1 lo que yo quiero es que cada vez que escriba una letra me vaia filtrando porque con el código que io he hecho solo me filtra cuando escribo el código del cliente completo y presión enter y lo que io quiero es que me filtre cada vez que escriba una letra,, espero qm e aiaz entendido... Graciazzz

2 respuestas

Respuesta
1
Bueno para eso se tiene que crear otro evento en el sle:
1.- Crear un nuevo evento en el sle_1 llamado "e_keypress" en el EventID seleccionar la Opción "pbm_keyup"
2.- Dentro del evento creado, colocamos el siguiente código:
// Verificamos, si en el sle no hay nada, dejamos vacío el filtro, así te mostrara todos los registros
If text = '' or isNull(text) Then
   dw_1.SetFilter("")
   dw_1.Filter()
Else
   dw_1.SetFilter("UPPER(cod_cliente) like'%" + This.Text + "%'")
   dw_1.Filter()
End If
Eso es todo, recuerda que el evento open de la ventana tienes que poner lo siguiente:
// Seteamos el Objeto Transacción al dw para mostrar los datos al inicio
dw_1.SetTransObject( SQLCA)
dw_1.Retrieve( )
Si tienes más dudas, hasmelas saber.
Man si sale pero ahora lo quiero hacer con el campo nombre pero no me filtra nada cuando empiezo a escribir en el sle_1 el datawindow se queda en blanco.
* se supone q solo le tengo q cambiar el nombre del campo o no ???
Man si sale pero ahora lo quiero hacer con el campo "nombre", se supone a solo debo cambiar el nombre del campo "cli_cliente" por "nombre" lo he cambiado pero no me filtra nada cuando empiezo a escribir en le sl_1 el datawindows se queda en blanco
*al crear el evento e_keypress ai variaz opciones solo le escribo "e_keypress" en el EventName ? y el Return Type lo dejo en (None) ??..
Así es solo tienes que cambiar:
If text = '' or isNull(text) Then
   dw_1.SetFilter("")
   dw_1.Filter()
Else
   dw_1.SetFilter("UPPER(nombre) like'%" + This.Text + "%'")
   dw_1.Filter()
End If
Nada man no filtra que raro ... como t digo cuando empiezo a escribir el datawindows se queda en blanco
Bueno a mi si me filtra, intente con todos los campos, y todo me sale bien, recuerda que el campo: dw_1. SetFilter("UPPER(nombre) like'%" + This.Text + "%'") tiene que ser el mismo nombre de tu campo en tu datawindows, de repente el tuyo es diferente, verifica bien todos tus datos. Si tienes más dudas hasmelas saber.
Respuesta

Como te dice Nestor, te faltan los porcentajes propios del comando LIKE.

busca="upper(cod_cliente) like '%" + (sle_1.text) + "%'"

Recuerda que los porcentajes funcionan a modo de comodín. Puedes usarlos por delante o por detrás del texto que quieres buscar. Puedes buscar %A% y te traerá todos los registros que tengan una A en su código. O Puedes poner A% y traerá todos aquellos cuya primera posición es una A.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas