Buscar en un DW

Hola experto, estoy empezando en Power Builder, mi problema es el siguiente.
Tengo creado un DW en el cual tengo los campos Folio, Signatario, Dependencia, Turnado, Asunto y Solventacion y me funciona perfectamente, ahora lo que quiero es tener un botón de buscar que me habrá una ventana y ahí poder seleccionar lo que quiero buscar, las búsquedas que quiero hacer son por Folio, Signatario y turnado, por ejemplo que selecciones folio en un ddlb_opcion y en una sle_opcion ponga el folio ha buscar y ha darle aceptar me traiga los datos que considan con el numero de mi folio al DW.
De antemando muchas gracias por tu ayuda.

1 respuesta

Respuesta
1
Quiero centrar mi respuesta y proponerte una solución mucho más simple.
Si tu datawindow esta basado en una o varias tablas, es decir, si los datos que se presentan en ella son extraídos directamente de la base de datos. Tu maneja de hacer la búsqueda es más simple de lo que crees.
Mi propuesta es que utilices una técnica llada QUERY BY EXAMPLE. Esta técnica es proporcionada directamente por power builder, algunos lenguajes como informix, lo tienen y esta basada en que en una pantalla o ventana, colocas campos directamente de las tablas, y en ellos el usuario puede escribir cualquier cosa para hacer una búsqueda, desde una cadena completa la cual deberá ser exacta hasta porciones de esa cadena e incluso condiciones como AND OR etc.
Para el efecto y si esto es de tu interés (créeme que mi experiencia me dice que el usuario se entiende mejor con esto), los pasos son.
Una vez que tengas hecho un datawindow y ya puedas presentarlo como una opción de consulta de datos.
Mi propuesta es que coloques un botón que denote búsqueda, por ejemplo NUEVA BÚSQUEDA.
Dentro de este.
PARENT.dw_1. SetRedraw(FALSE)
PARENT.dw_1.object.datawindow.queryclear = 'Yes'
PARENT.dw_1.object.datawindow.ReadOnly = 'Yes'
PARENT.dw_1.Reset()
PARENT.dw_1.object.datawindow.ReadOnly = 'No'
PARENT.dw_1.object.datawindow.QueryMode = 'yes'
PARENT.dw_1.SetRedraw(TRUE)
ahora añade otro boton que denote ejecucion de lo ingresado.
por ejemplo EJECUTAR BUSQUEDA, o PROCESAR BUSQUEDA.
en este coloca
LONG ll_num_rows
PARENT.dw_1.accepttext()
PARENT.dw_1.object.datawindow.ReadOnly = 'Yes'
PARENT.dw_1.object.datawindow.QueryMode = 'No'
ll_num_rows = PARENT.dw_1.EVENT ue_retrieve()
El resto de cosas puedo dejártelo a tu imaginación.
Por ejemplo yo personalmente elabore una pantalla donde tengo varios botones, y ademas un datawindow control, vacío, esta pantalla tiene todas las características que te menciono como esenciales, y ademas un botón para imprimir, otro para aumentar o disminuir el porcentaje del tamaño del resultado.
Otro para ordenar, en fin.
Luego esta pantalla que llamo contenedor, la heredo tantas veces como ventanas de búsqueda o localización tenga en mi aplicación. Una vez heredada lo único que me resta es incluir el datawindow object, basado en tablas y listo.
Las ventajas es que te aparece el grid de la ventana (en caso de ser un grid), y en el resaltan aspectos distintos a los normales, por ejemplo si tienes una columna que contenga el nombre de un cliente (por ejemplo), puedes escribir
Like %jua%
Esto funciona como la condición where del select, like significa que buscará lo más parecido, los porcentajes significan comidines que determinan cualquier cosa en el sitio o lugar donde están definidos, en el ejemplo la instrucción buscará cualquier nombre que contenga en cualquier lugar la palabra JUA.
Mi recomendación es que pruebes esta modalidad de power builder y créeme que puedes apuntarte un HIT con tus usuarios.
Por cierto si necesitas más información echale un vistazo a la ayuda en linea de pb, con las características de "QueryMode", y veras lo que te estoy proponiendo.
La ventaja de este método es que en el propio datawindow haces tus consultas, denota el resultado, y lo puedes imprimir y exportar incluso a excel si así lo necesitares.
En otras palabras es dinámico.
Sin embargo si luego de probarlo, no te convence, entonces conmucho gusto te ayudo a resolver de la forma externa.
Hola experto ya intento lo que me comentates, pero me marca un error el al linea
ll_num_rows = PARENT.dw_1.EVENT ue_retrieve()
Unknown function name: ue_retrieve
Muchas gracias por tu ayuda amigo
Perdón por la falta de información.
El evento ue_retrieve() es un evento de usuario, dentro de este lo que hago realmente es una llamada a dw_1. Retrieve()
Como te dije en mi respuesta anterior, lo que tengo es una pantalla que llamo contenedor, y que es genérica para todo, por esa razón simplemente cree una serie de eventos de usuario y uno de ellos es ue_retrieve(), este evento puedes crearlo en tu forma o no,
como te digo funciona exactamente igual que el retrieve.
Si quieres puedes reemplazarlo por
ll_num_rows = PARENT.dw_1.retrieve()
Recuerda que igualmente la función retrieve() puede o no contener argumentos de selección de datos.
Y esto es lo mejor, pues ademas de las condiciones que tu le pongas en el where, añade las que genera autimaticamente en función del Query by Example.
Me gustaría tener un poco más de información, la verdad es que no logro entender tu planteamiento.
Si te parece, podrías cerrar primero esta pregunta para que no crezca tanto. Y continuamos en otra.

Añade tu respuesta

Haz clic para o

Más respuestas relacionadas