jueves, 1 de septiembre de 2016

Trabajando con DropDowDatawindow - DDDW

En el siguiente post, respondo a la pregunta que llego a mi correo de un compañero, con respecto a como trabajar con campos de tipo DDDW.

Empezamos con el ejemplo:

En mi diseño de base de datos, tengo 2 tablas:

Tipo_Pago
id_tipo_pago integer (PK)
nom_tipo_pago varchar(50)

Forma_Pago
id_forma_pago integer (PK)
id_tipo_pago integer (FK)
nom_forma_pago varchar(50)

En Tipo_Pago se registra:

1 | CONTADO
2 | CREDITO

En Forma_Pago se registra

1 | 1 | EFECTIVO
2 | 2 | CREDITO A 15 DIAS
3 | 2 | CREDITO A 30 DIAS
4 | 2 | CREDITO A 60 DIAS

Tengo un DataWindow Object d_form_venta, en el que tengo 02 campos:

1 - id_tipo_pago que esta asociado a dddw_tipo_pago y con AutoRetrieve = True
2 - id_forma_pago que esta asociado a dddw_forma_pago, con AutoRetrieve = False

En tiempo de ejecución si se elije el Tipo de Pago CREDITO, el campo Forma de Pago solo debe filtrar los que pertenezcan al Tipo de Pago seleccionado.









Para cumplir con esto se debe programar en los siguientes eventos:

En el evento Itemchanged, del DataWindow Control, tenemos el siguiente código:
























En el evento RetrieveEnd, del DataWindow Control, tenemos el siguiente código:













Sugerencia: Por buenas practicas de diseño de base de datos las claves primarias (primary keys) y claves foraneas (foreign keys) deben ser de tipo integer.

martes, 30 de agosto de 2016

Usando Function PostgreSQL simple en DataWindow

Ya habíamos visto como usar una función de PostgreSQL en un DataWindow:

Usando Function PostgreSQL en DataWindow

Hay casos mas simples, donde necesitamos usar un SELECT mas simple. Ejemplo necesitamos un DDDW en el cual podamos listar el id y el nombre de los productos, entonces creamos la función en PostgreSQL, con el siguiente código:

























dom_integer, dom_bigint y dom_nombrelargo son dominios. Ya hemos visto sobre dominios en este post:

Usando Dominios en PostgreSQL

Hay 2 opciones para ejecutar la función:







Cualquiera de las 2 opciones la copiamos en el Data Source del DataWindow y listo.

miércoles, 17 de agosto de 2016

Listar tablas con su primary key en PostgreSQL

El siguiente script, devuelve todas las tablas de una base de datos PostgreSQL, con su respectiva primary key:


martes, 16 de agosto de 2016

Equivalencia de Tabla DUAL de Oracle en PostgreSQL

En Oracle existe la Tabla DUAL, que es una tabla, creada durante la instalación, con una sola columna llamada DUMMY de VARCHAR2(1)  y una sola fila de contenido 'X'. El propietario es SYS y puede ser accedida por cualquier usuario.


Se usa generalmente para ejecutar funciones como SYSDATE.

La Tabla Dual no existe en PostgreSQL, pero hay dos soluciones:

1. Crear la Tabla Dual:

create table public.dual
(
  dummy VARCHAR(1)
);

2. Esta es la que uso: solo ejecutando SELECT con el valor que se requiere, ejemplo:

Necesito tener en un combo todas las familias de un producto, para un filtro en una ventana, al seleccionar una familia debe filtrar los productos que pertenecen a esa familia. La tabla tiene la siguiente estructura:


En mi combo necesito también el dato 'TODAS', para que así el filtro devuelva los productos que pertenecen a las 5 familias.

En Oracle usando:


En PostgreSQL:


Entonces hacemos el siguiente script, que luego lo copiamos en el SQL de un DataWindow:


Espero sea ayuda para ustedes.

sábado, 13 de agosto de 2016

viernes, 12 de agosto de 2016

Objeto para reemplazar el uso de DDDW

He creado un objeto para reemplazar el uso de un DDDW o una ventana de búsqueda y/o filtro, el cual tiene las siguientes funcionalidades:

-Se adapta a cualquier campo de un DataWindow.
-Tiene un filtro de búsqueda.
-Trabaja como cualquier DDDW.
-Se cierra al posicionarse en cualquier otro campo del DW u otro objeto de la ventana.
-Aumenta de tamaño. No sale del tamaño de la ventana.


Si el dato filtrado en la búsqueda es muy grande, como se muestra en la siguiente imagen:









Se puede aumentar el tamaño y visualizar mejor el dato, como se muestra en la siguiente imagen sin perder la forma.

(Dar clic en la imagen para agrandar)

Si lo puedes imaginar en PowerBuilder lo puedes crear.