Buenas...
El método SetFilter (ExpresionLógica) sirve para establecer un filtro en la datawindow o datastore. Lo que devuelve es 1 ó 0 para indicar si se ha registrado el cambio.
El método Filter lo que hace es ejecutar el filtro que has puesto.
Otros métodos que puedes consultar son .
FilteredCount () -> Te da el número de registros que se han filtrado. No han desaparecido sino que están ocultos
ldw_loquesea.Describe ("Datawindow.Table.Filter") -> Esto te da el filtro que tiene actualmente la datawindow. La que se ha puesto con el SetFilter. o "!" si no hay nada o "?" si te has equivocado en la sintáxis.
Si la consulta que haces de los libros no es muy grande y la conexión a la base de datos no es lenta, no está mal traerse todos los registros y luego hacer una búsqueda, pero si no es el caso te recomiendo que afines la localización del registro usando los argumentos del Retrieve.
Otra cosa que puedes hacer es hacer una búsqueda sobre los datos en pantalla usando Find. La sintáxis es ldw_loquese.Find (ExpresionLógica, ll_FilaInicio, ll_FilaFin). Lo que devuelve es si es > 0 la fila de la primera coincidencia, si es -1 que no hay coincidencia y -5 si hay un error sintáctico.
Si lo que devuelve el Find es > 0 puedes hacer un
ldw_loquesea.ScrollToRow (ll_filaEncontrada) // Fuerza un scroll de la datawindow si fuese necesario
ldw_loquesea.Setrow (0, false) // Borra los registros seleccionados
ldw_loquesea.SetRow (ll_filaEncontrada, true) // Selecciona el encontrado.
Esto lo puedes al mismo tiempo que escribes sobre el sle_busqueda y es bastante vistoso.
En los dos casos (El del SetFilter y el del Find) se pueden usar sixtáxis propia de PowerBuilder para las expresiones booleanas.
Por ejemplo:
Upper(Genero) like '%FICIÓN%'
Precio <= 50
FechaPublicacion >= Date ('01/01/2009')
ISBN = 123456
Espero haberte ayudado.