Hola genio.
Como te va, te quería preguntar si yo de una datawindow en blanco puedo traer datos según un sql, pero escrito desde un botón, una ventana o en un procedimiento. Yo lo quiero hacer es una búsqueda multile, en uno busco por apellido, nombre, código, etc, eso por ej tenerlo en un combo, después tener otro combo, donde diga =,>,¿<, like, y otro donde ponga el dato, asi mas o menos, no das el msn vos, no?
¿Tienes una clase de búsqueda?
¿Tienes una clase de búsqueda?
1 Respuesta
Respuesta de Antonio Garcia
1
1
Antonio Garcia, clipper todas sus versiones (manejo total) power builder todas...
Si me permites te voy a dar una solución la cual me ha funcionado muy bien
El datawindow tiene la capacidad de hacer algo que lleva el nombre de QUERY BY EXAMPLE, esta técnica, esta basada principalmente en una ventana en la cual aparecen una serie de columnas propias de una o varias tablas, y en ellas es posible hacer cualquier tipo de condición para seleccionar los datos que se encuentran en dicha o dichas tablas, en esta técnica incluye ><= like <= >= and or, esto permite un amplio horizonte para el usuario que condiciona sus búsquedas por sus propias condiciones.
Para hacer lo que te comento, exiten 2 formas,
Fácil:
Utilizando los botones propios del datawindow object, en la misma pantalla que tienes como consulta, por ejemplo en la cabecera, puedes relacionar estos a eventos propios del data window, por ejemplo, incluyes en la cabecera un botón el cual le llamaras Query, en la propiedad ACTION del botón en la pestaña GENERAL, encontraras una serie de acciones que puede ejecutar dicho botón, este tendrá al por omisión la acción USER DEFINED(0), la cual la defines tu dentro del evento BUTTONCLICKED o BUTTONCLICKING, del datawindow control, siguiendo con el tema, en esta propiedad deberás incluir la acción QUERYMODE, esto te coloca automáticamente el datawindow object en modo QUERY BY EXAMPLE, en este momento puedes definir tu búsqueda por ejemplo,
si la ventana tiene 2 columnas
Código y descripción, las cuales refieren a la tabla de productos, y necesitas localizar los productos que incluyan la palabra tornillo, entonces en la columna descripción escribes LIKE TORNILLO, pulsas el botón QUERY y luego RETRIEVE, y ya.
Por cierto el botón RETRIEVE lo deberás indicar exactamente como el QUERY, incluyes un botón y asocias la acción RETRIEVE.
Ahora la no tal fácil.
En caso de no utilizar los botones propios del datawindow, esto implica que en la pantalla donde tienes incluida la búsquedas deberás incluir 2 controles tipo botón y en el evento clicked de estos indicaras las acciones QUERYMODE y RETRIEVE,
Por ejemplo EN EL BOTÓN QUERY.
La instrucción deberá ser
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'
Estas instrucciones indican accionar el modo QUERYMODE y colocar el modo READONLY en apagado para poder incluir datos, en dicha ventana.
Igualmente tendrás que incluir un botón para hacer el correspondiente retrieve.
Anotaciones:
De una forma o de otra, el resultado siempre es el mismo, ademas tienes la ventaja que puedes incluir un botón el cual tenga la finalidad de imprimir el resultado obtenido del Query.
A lo mejor te preguntaras, bueno y que pasa si por ejemplo en un select incluido en un datawindow object incluyo datos constantes. Por ejemplo, mi aplicación es de tipo multi-empresa y de momento necesito incluir en el where del select la condición que la empresa sea igual a 1, la respuesta es simple, el query by example, respeta cualquier condición incluida en el where ya sea con datos constantes o por medio de argumentos de retrieve, estos son incluidos en la nueva condición de búsqueda la cual automáticamente se construye en el momento de condicionar las columnas por medio del QUERYMODE.
Para finalizar, si quieres ejemplos, o simplemente más información acerca de como funcionan las variantes del querymode, la puedes obtener en la ayuda online de power builder simplemente busca querymode.
El datawindow tiene la capacidad de hacer algo que lleva el nombre de QUERY BY EXAMPLE, esta técnica, esta basada principalmente en una ventana en la cual aparecen una serie de columnas propias de una o varias tablas, y en ellas es posible hacer cualquier tipo de condición para seleccionar los datos que se encuentran en dicha o dichas tablas, en esta técnica incluye ><= like <= >= and or, esto permite un amplio horizonte para el usuario que condiciona sus búsquedas por sus propias condiciones.
Para hacer lo que te comento, exiten 2 formas,
Fácil:
Utilizando los botones propios del datawindow object, en la misma pantalla que tienes como consulta, por ejemplo en la cabecera, puedes relacionar estos a eventos propios del data window, por ejemplo, incluyes en la cabecera un botón el cual le llamaras Query, en la propiedad ACTION del botón en la pestaña GENERAL, encontraras una serie de acciones que puede ejecutar dicho botón, este tendrá al por omisión la acción USER DEFINED(0), la cual la defines tu dentro del evento BUTTONCLICKED o BUTTONCLICKING, del datawindow control, siguiendo con el tema, en esta propiedad deberás incluir la acción QUERYMODE, esto te coloca automáticamente el datawindow object en modo QUERY BY EXAMPLE, en este momento puedes definir tu búsqueda por ejemplo,
si la ventana tiene 2 columnas
Código y descripción, las cuales refieren a la tabla de productos, y necesitas localizar los productos que incluyan la palabra tornillo, entonces en la columna descripción escribes LIKE TORNILLO, pulsas el botón QUERY y luego RETRIEVE, y ya.
Por cierto el botón RETRIEVE lo deberás indicar exactamente como el QUERY, incluyes un botón y asocias la acción RETRIEVE.
Ahora la no tal fácil.
En caso de no utilizar los botones propios del datawindow, esto implica que en la pantalla donde tienes incluida la búsquedas deberás incluir 2 controles tipo botón y en el evento clicked de estos indicaras las acciones QUERYMODE y RETRIEVE,
Por ejemplo EN EL BOTÓN QUERY.
La instrucción deberá ser
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'
Estas instrucciones indican accionar el modo QUERYMODE y colocar el modo READONLY en apagado para poder incluir datos, en dicha ventana.
Igualmente tendrás que incluir un botón para hacer el correspondiente retrieve.
Anotaciones:
De una forma o de otra, el resultado siempre es el mismo, ademas tienes la ventaja que puedes incluir un botón el cual tenga la finalidad de imprimir el resultado obtenido del Query.
A lo mejor te preguntaras, bueno y que pasa si por ejemplo en un select incluido en un datawindow object incluyo datos constantes. Por ejemplo, mi aplicación es de tipo multi-empresa y de momento necesito incluir en el where del select la condición que la empresa sea igual a 1, la respuesta es simple, el query by example, respeta cualquier condición incluida en el where ya sea con datos constantes o por medio de argumentos de retrieve, estos son incluidos en la nueva condición de búsqueda la cual automáticamente se construye en el momento de condicionar las columnas por medio del QUERYMODE.
Para finalizar, si quieres ejemplos, o simplemente más información acerca de como funcionan las variantes del querymode, la puedes obtener en la ayuda online de power builder simplemente busca querymode.
Disculpame capaz que mi saber no es mucho, pero lo que quiero yo simplemente en la ventana poner un botón con un text donde poner porj:empresa1 Y QUE ESO SEA el parámetro del where, entonces de ahí que me traiga la información, igual si podes explicame bien lo que me pusiste, que no lo entiendo, bueno ante todo disculpame.
Gracias, saludos
Gracias, saludos
Con respecto a la técnica de QUERY BY EXAMPLE, esta es una forma de darle al usuario una ventana abierta en la cual el utilizando las columnas presentadas en ella, puede solicitar información del sistema, condicionando por medio de las columnas la información que desea, por ejemplo si en una ventana tienes 3 columnas código, descripción, precio, el usuario podría hacer una consulta de los artículos que sean menores o igual a 100, colocando en la columna precio <= 100, esto seria en propiedades programaticas como si el usuario construyera un script mas o menos asi.
SELECT codigo, descripcion, precio
FROM mae_articulos
WHERE (precio <= 100)
Sin embargo el usuario no tiene primero que conocer de programación SQL, y segundo saber que esto se esta produciendo dentro del programa. Ademas tiene la posibilidad de combinar otras columnas, por ejemplo podría ademas de la condición anterior incluir en la descripción la necesidad de los artículos que incluyan en su descripción la palabra PLANCHA, si esto fuera por medio de un programa entonces el programa debería tener una selección más o menos así:
SELECT codigo, descripcion, precio
FROM mae_articulos
WHERE (precio <= 100)
AND (descripcion like '%PLANCHA%')
Claro, en la tecnica QUERY BY EXAMPLE, esto no ocurre, puesto que es el programa que automaticamente e internamente lo maneja. Ni el programador, ni el usuario lo hacen, para el programador esto es soltar al usuario, ofreciendole un abanico de combinaciones, y para el usuario esto es simplemente volverse el dueño de la informacion que necesita, como la necesita, cuando, etc.
Claro, posiblemente dirás, pues no es esto en realidad lo que necesito, bien como dices en tu pregunta, simplemente un botón en el cual al pulsarlo seleccione por ejemplo todos los artículos de la empresa 1, entonces la solución será si me permites, dada por un parámetro de condición, o argumento de condición.
esto lo construyes desde el datawindow object. Es recomendable que trabajes los scripts de los datawindow object, en forma de sintaxis, en esta área deberás incluir un argumento de retrieval, el cual deberá ser del mismo tipo de la columna con la que vas a relacionarlo, para declarar un argumento de retrieval, simplemente vas al menu principal, seleccionas la opción DESIGN, por cierto en esta igualmente encuentras la opción de convertir el script GRÁFICO a SINTAXIS, bien continuando, luego seleccionas RETRIEVAL ARGUMENTS, aquí se abrirá un cuadro de dialo, donde solicita el nombre del argumento y el tipo.
Una vez declarado, solo queda incluirlo en el script por ejemplo si tu argumento se llama ar_empresa entonces el script podría ser más o menos así,
Seleccionando datos de empleados.
SELECT codigo, nombre, direccion, puesto
FROM mae_empleados
WHERE empresa = :ar_empresa
Como veras la comparación en el where es hecha con el ar_empresa, anteponiendo dos puntos lo que indica que se trata de un argumento o variable externa a la tabla.
el paso siguiente sera grabar el datawindow object.
Ahora indicamos por medios externos por ejemplo por medio de un botón en el cual ponga EMPRESA 1, la selección de los datos de los empleados de la empresa 1, presentados en la pantalla que incluye el datawindow control, simpelemente harás
PARENT. dw_1. Retrieve(1)
Explicando:
PARENT --> es el prefijo que indica la ubicación anterior al objeto en que te encuentras.
Dw_1 --> es el nombre del control datawindow.
Retrieve() --> es la función que indica al datawindow a retraer información. O en otras palabras activar el script que en el interior del datawindow object se encuentra.
1 --> es el argumento o parametro que recibe el datawindow object. y lo incluye en el where.
Recomendación.
Si tu problema se resuelve con esta ultima propuesta, en hora buena, sin embargo, la técnica de QUERY BY EXAMPLE, te puede con una simple ventana, resolver infinidad de reportes, consultas, incluso hasta puedes generar hojas de excel, y todo esto en una misma pantalla. No necesitas entonces un reporte para la empresa 1, otro para la empresa 2, otro para la empresa 3, y así sucesivamente, y si nace una nueva empresa, la situación vuelve a repetirse, simplemente el usuario decide que datos necesita, sin embargo, esto es simplemente una propuesta, y como todos sabemos, al final tu decides que le das al usuario.
SELECT codigo, descripcion, precio
FROM mae_articulos
WHERE (precio <= 100)
Sin embargo el usuario no tiene primero que conocer de programación SQL, y segundo saber que esto se esta produciendo dentro del programa. Ademas tiene la posibilidad de combinar otras columnas, por ejemplo podría ademas de la condición anterior incluir en la descripción la necesidad de los artículos que incluyan en su descripción la palabra PLANCHA, si esto fuera por medio de un programa entonces el programa debería tener una selección más o menos así:
SELECT codigo, descripcion, precio
FROM mae_articulos
WHERE (precio <= 100)
AND (descripcion like '%PLANCHA%')
Claro, en la tecnica QUERY BY EXAMPLE, esto no ocurre, puesto que es el programa que automaticamente e internamente lo maneja. Ni el programador, ni el usuario lo hacen, para el programador esto es soltar al usuario, ofreciendole un abanico de combinaciones, y para el usuario esto es simplemente volverse el dueño de la informacion que necesita, como la necesita, cuando, etc.
Claro, posiblemente dirás, pues no es esto en realidad lo que necesito, bien como dices en tu pregunta, simplemente un botón en el cual al pulsarlo seleccione por ejemplo todos los artículos de la empresa 1, entonces la solución será si me permites, dada por un parámetro de condición, o argumento de condición.
esto lo construyes desde el datawindow object. Es recomendable que trabajes los scripts de los datawindow object, en forma de sintaxis, en esta área deberás incluir un argumento de retrieval, el cual deberá ser del mismo tipo de la columna con la que vas a relacionarlo, para declarar un argumento de retrieval, simplemente vas al menu principal, seleccionas la opción DESIGN, por cierto en esta igualmente encuentras la opción de convertir el script GRÁFICO a SINTAXIS, bien continuando, luego seleccionas RETRIEVAL ARGUMENTS, aquí se abrirá un cuadro de dialo, donde solicita el nombre del argumento y el tipo.
Una vez declarado, solo queda incluirlo en el script por ejemplo si tu argumento se llama ar_empresa entonces el script podría ser más o menos así,
Seleccionando datos de empleados.
SELECT codigo, nombre, direccion, puesto
FROM mae_empleados
WHERE empresa = :ar_empresa
Como veras la comparación en el where es hecha con el ar_empresa, anteponiendo dos puntos lo que indica que se trata de un argumento o variable externa a la tabla.
el paso siguiente sera grabar el datawindow object.
Ahora indicamos por medios externos por ejemplo por medio de un botón en el cual ponga EMPRESA 1, la selección de los datos de los empleados de la empresa 1, presentados en la pantalla que incluye el datawindow control, simpelemente harás
PARENT. dw_1. Retrieve(1)
Explicando:
PARENT --> es el prefijo que indica la ubicación anterior al objeto en que te encuentras.
Dw_1 --> es el nombre del control datawindow.
Retrieve() --> es la función que indica al datawindow a retraer información. O en otras palabras activar el script que en el interior del datawindow object se encuentra.
1 --> es el argumento o parametro que recibe el datawindow object. y lo incluye en el where.
Recomendación.
Si tu problema se resuelve con esta ultima propuesta, en hora buena, sin embargo, la técnica de QUERY BY EXAMPLE, te puede con una simple ventana, resolver infinidad de reportes, consultas, incluso hasta puedes generar hojas de excel, y todo esto en una misma pantalla. No necesitas entonces un reporte para la empresa 1, otro para la empresa 2, otro para la empresa 3, y así sucesivamente, y si nace una nueva empresa, la situación vuelve a repetirse, simplemente el usuario decide que datos necesita, sin embargo, esto es simplemente una propuesta, y como todos sabemos, al final tu decides que le das al usuario.
- Compartir respuesta
- Anónimo
ahora mismo