Filtro Sle en Power builder

Estaba creando un Filtro Para mi Reporte de Clientes
Y Pondré mi Cpdigo a Continuación, Pero les Explico primero mi problema, que una vez Creo todo como se explica me corre super bien pero ... En el Sle cuando Escribo la primera letra me Filtra a los que tengan dicha primera letra, pero cuando escribo la segunda letra, me Genera Error de Registro no Existe ("Ese msgbox lo puse io para que salga cuando no hay registros")
Pero dicho registro si Existe >. <
Supongamos que tengo mis cliente Luis Ramírez y León Valenzuela... Yo Ingreso Primero L y me muestra ambos registros pero cuando después ingreso la "u" Quedándome "Lu", Debería mostrarme a Luis Ramírez solo, ¿Pero me bota Registro no Existe a que se puede deber?
string ls_buscar
integer li_buscar
if w_8productos.dw_1prod.rowcount( )<>0 then //Si el datawindow cliente contiene algun cliente
   w_8productos.dw_1prod.setfilter("") //filtramos todos los registros del datawindow cliente
   w_8productos.dw_1prod.filter()
   //Hacemos una comparación del campo "nombres_cliente" del datawindow con las letras introducidas en el sle_filpro.
   ls_buscar="Producto like '"+upper(sle_filpro.text)+"%'"
   //Buscamos los registros que coincidan con las letras introducidas en "sle_filpro"
   li_buscar=w_8productos.dw_1prod.find(ls_buscar,1,w_8productos.dw_1prod.rowcount())
   if li_buscar=0 then
      messagebox("Verifique","¡Registro no Existe!",Exclamation!)
      sle_filpro.setfocus( )
  sle_filpro.text = ""
      return
  else
     w_8productos.dw_1prod.scrolltorow(li_buscar) //Mostramos los registros coincidentes
     w_8productos.dw_1prod.setfilter(ls_buscar) //Filtramos los registros que coinciden
     w_8productos.dw_1prod.filter()
     w_8productos.dw_1prod.setsort("Producto a") //Ordenamos de forma ascendente
     w_8productos.dw_1prod.sort( )
  end if
else //Si no contiene desplegamos el siguiente mensaje
    messagebox("Verifique","¡No Existen Registros!",Information!)
end if
Respuesta
1
Disculpa la demora, pero creo que estas haciendo mucho código extra, para que te filtre solo seria:
String ls_filtro
Long ll_fila
ls_filtro = "Producto like '"+upper(sle_filpro.text)+"%'"
dw_1.SetFilter( ls_filtro)
dw_1.Filter( )
IF dw_1.RowCount( ) = 0 THEN
     MessageBox( "MENSAJE", "No existe")
ELSE
     ll_fila = dw_1.Find( ls_filtro, 1, dw_1.RowCount( ))
     dw_1.ScrollToRow( ll_fila)
END IF
Esos ería todo, pruébalo y me avisas. Si tienes más dudas me las haces saber.

1 respuesta más de otro experto

Respuesta
1
¿Lo qué deseas es hacer una búsqueda sensitiva?
Busca filtro_busqueda_dw.zip en:
http://powerbuilder.iespana.es/ejemplospb/ejemplos.html
Ese ejemplo te ayudara
Tengo un filtro sensitivo Ya
Te explico
Tengo dos Formulario, x_boleta y w_reportecliente
El w_Boleta tiene campos de clientes, y un botón que me abre w_reportecliente
Al selecciones o hacer rowfocus en uno de los clientes en w_reportecliente los datos son pasados a los campos (sle_nom.text, sle_cod.text etc ..) que están en x_boleta
En el w_reporte Tengo un Dw Grid y el Filtro que te mostré Arriba, Pero como te digo solo ingreso una letra ya que a la segunda me dice: " No existe Registro"
En este caso, combinación de formularios no puedo usar el Filtro sensitivo, ya que me genera error en el rowfcuschanged de w_reportecliente, cuyo error indica que es debido al traspaso de datos de w_reportecliente hacia x_boleta
Este esmi codigo de w_reportecliente (en el Rowfocuschanged del dw_1)
string ls_cli
if rowcount( ) <1 then
return
end if
ls_cli = getitemstring(currentrow,1)
selectrow(0,false)
selectrow(currentrow,true)
cli_cod = dw_1.getitemstring(currentrow,1)
cli_nom = dw_1.getitemstring(currentrow,2)
cli_direc = dw_1.getitemstring(currentrow,3)
x_boleta.sle_direc.text = string(cli_direc)
x_boleta.sle_cod.text = string(cli_cod)
x_boleta.sle_nom.text = string(cli_nom)
Es por eso que no puedo usar un filtro sensitivo allí y si tienes alguna forma de Hacerlo estaré eternamente agradecido
Saludos
O si fuera el caso de hacer el traspaso de otra forma xS Estaré al tanto
¿Dónde colocas ese código de tu primera pregunta?

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas