• Domingo 6 de Octubre de 2024, 14:53

Autor Tema:  Métodos filter() y setfilter()  (Leído 14293 veces)

410n5o

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Métodos filter() y setfilter()
« en: Lunes 23 de Noviembre de 2009, 03:54 »
0
Buenas a todos,
Soy un total principiante en PowerBuiler. Estoy trabajando con un datawindow tipo tabular, el sistema es para una biblioteca asi que primero lleno el dw con todos los datos del libro: nombre, género, título, estado... Entonces luego necesito filtrar el dw, me dijeron que con los métodos filter() y setfilter() puedo de alguna manera seleccionar la columna de la tabla de la base de datos para filtrar por género, título, etc, según lo digitado en un sle. Me ayudarían con la sintaxis básica de los métodos y si esos funcionan adecuadamente para lo que yo necesito? Gracias de antemano

davidmolina1

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Métodos filter() y setfilter()
« Respuesta #1 en: Lunes 23 de Noviembre de 2009, 17:31 »
0
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.

darksito

  • Miembro MUY activo
  • ***
  • Mensajes: 145
  • Nacionalidad: pe
    • Ver Perfil
Re: Métodos filter() y setfilter()
« Respuesta #2 en: Lunes 23 de Noviembre de 2009, 21:09 »
0
te recomendaria q visites esta web http://powerbuilder.iespana.es/ en la seccion ejemplos hay uno de filtrar y buscar a mi me sirvio mucho tienes!  usa powerbuilder 10 para ejecutarlo


410n5o

  • Nuevo Miembro
  • *
  • Mensajes: 3
    • Ver Perfil
Re: Métodos filter() y setfilter()
« Respuesta #3 en: Viernes 27 de Noviembre de 2009, 19:14 »
0
Muchas gracias por la ayuda a ambos, fue muy útil!
Ahora tengo otra duda en el mismo programa, como es para una biblioteca tengo un mantenimiento que es configurar catálogos y para eso tengo varias ventanas con un datawindow cada una, y obviamente esos dw permiten actualización. Para otra ventana agregar material tengo que digitar valores como nombre del material y seleccionar un campo de cada uno de los catálogos, esos catálogos son exactamente los mismos de la ventana de configuración. Exactamente lo que me tiene trabado es que necesito usar los mismos datawindows en distintas ventanas, en una que se puede seleccionar y actualizar, y en la otra que se pueda seleccionar pero no actualizar. Puedo modificar eso para el mismo dw en distintas ventanas o tengo que hacer una datawindow nuevo para la otra ventana? Gracias de nuevo

davidmolina1

  • Miembro activo
  • **
  • Mensajes: 51
    • Ver Perfil
Re: Métodos filter() y setfilter()
« Respuesta #4 en: Viernes 27 de Noviembre de 2009, 21:03 »
0
Hola.

No tienes que usar los mismos datawindows, puedes usar tantas datawindows como desees, todas traerán datos de la misma base de datos pero cada una presentará los datos según necesites.

Sobre lo que planteas no hay ningún problema en que uses la misma datawindow, en un sitio selecciona y actualiza datos y en otro solo selecciona datos.

La actualización de datos la programas tú, así que si no haces el update () no hay problemas, no bloqueará los registros traídos, ni los modificará ya que tú no le harás el update.

Otra cosa es que el la segunda datawindow (la que seleccionas y no actualizas) permitas editar los campos. Realmente no pasa nada , solo que queda feo que el usuario pueda editar algo que no puede grabar.

Saludos.