Mostrando entradas con la etiqueta DataWindows. Mostrar todas las entradas
Mostrando entradas con la etiqueta DataWindows. Mostrar todas las entradas

lunes, 5 de septiembre de 2016

DataWindows con Function PostgreSQL con parametros tipo Fecha

Ya habíamos visto antes:

1. Como trabajar con fechas y horas en una base de datos PostgreSQL en el post Trabajando con Fechas y Horas en PostgreSQL

2. Como usar una función de PostgreSQL en un DataWindow en el post Usando Function PostgreSQL en DataWindow

Ahora en este post veremos como trabaja un DataWindow con un objeto Function de PostgreSQL que tiene parametros de tipo Fecha.

El objeto Function PostgreSQL tiene los siguientes parametros:
Los parametros p_fec_ini y p_fec_fin ambos deben ser tipo char(10), estos nos serviran para poder asignar una fecha inicial y una fecha final y tener el resultado entre el rango de esas fechas.

En el WHERE utilizar TO_CHAR y dar el formato 'dd/mm/yyyy'









En el DataWindow Object, establecemos los argumentos:
En el siguiente cuadro pertenece a la documentación oficial de PostgreSQL, podremos ver los formatos para tipos de datos. 












Mas detalle en el siguiente enlace: https://www.postgresql.org/docs/9.5/static/functions-formatting.html)

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.

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.

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.

lunes, 13 de junio de 2016

Usando Function PostgreSQL en DataWindow

En PostgreSQL no existen el objeto Stored Procedure, pero si el objeto Function que en PostgreSQL cumple al máximo como cualquier objeto Stored Procedure de otro motor de base de datos, ejemplo Oracle (mi preferido) y SQL Server(mi segundo preferido).

Y porque necesitamos trabajar con Stored Procedure (Oracle y SQL Server) o Function (PostgreSQL), por las siguientes ventajas: 
  • Rapidez, 
  • Seguridad, 
  • Encapsulamiento
  • Separar capas

La ejecución del Stored Procedure (Oracle y SQL Server) o Function (PostgreSQL) ocurre en el servidor de bases de datos. Esto probablemente aumentará el rendimiento de nuestra aplicación al no tenerse que mandar datos entre el cliente y el servidor, y no tener que procesar resultados intermedios en el cliente para obtener el resultado final.

Al tener la lógica de la aplicación implementada en la base de datos no tendremos que implementarla en los clientes, con el consiguiente ahorro de lineas de código redundante y complejidad.

Usar un objeto Function PostgreSQL en un DataWindow

El objeto DataWindow es muy potente y si esta asociado con un Stored Procedure (Oracle y SQL Server) o Function (PostgreSQL) obtendremos rapidez en los resultados que se requiere.

Seguiremos los siguientes pasos:

Paso1. Crear un objeto Type en PostgreSQL

En los siguientes enlaces podrás obtener mas información al respecto, les sugiero leerlos:
https://www.postgresql.org/docs/9.5/static/sql-createtype.html
https://www.postgresql.org/docs/9.5/static/rowtypes.html

Crearemos un Composite Types por código:


(Imagen 1)

Este Type esta comformado por varias campos con su respectivo tipo de dato.

Paso 2. Crear un objeto Function en PostgreSQL


En el siguiente enlace podrás tener mas información sobe Functions:
https://www.postgresql.org/docs/9.5/static/sql-createfunction.html


(Imagen 2)


En la linea RETURNS SETOF public.t_fu_sel_cliente AS se invoca al Type creado en el Paso 1, note que la estructura del Type es el mismo a la que esta dentro del SELECT, es decir son los mismo campos. Así se trabaja en PostgreSQL para devolver un SELECT desde un objeto Function PostgreSQL.

Paso 3. Crear un objeto DataWindow en PowerBuilder.

1. Creamos un nuevo objeto DataWindow:
(Imagen 3)

2. Elegimos SQL Select, clic en Next.
(Imagen 4)

3. Clic en el botón Cancel.
(Imagen 5)

4. Clic en Convert To Syntax de la opción Design
(Imagen 6)

5.Creamos 02 argumento que son los que necesita el objeto Function PostgreSQL
(Imagen 7)

(Imagen 8)

8. Debemos escribir lo siguiente:
(Imagen 9)

Y listo, eso es todo lo que necesitamos.

lunes, 19 de octubre de 2015

Usar Stored Procedures en Packages de Oracle en DataWindow

Para poder usar cualquier Stored Procedure que se encuentre en un Package de Oracle en un DataWindow, seguimos los siguientes pasos:

1. Buscamos la conexión de la Base de Datos Oracle que tenemos, clic derecho Properties:



2. Activamos la casilla List Package Subprograms de la pestaña System:

domingo, 18 de octubre de 2015

Usando Stored Procedure Firebird en DataWindow

El siguiente post es la respuesta a las preguntas que he recibido de como usar un Stored Procedure creado en Firebird en un DataWindow.

Primero: El siguiente Stored Procedure en Firebird

CREATE PROCEDURE USP_LISTA_RUTA(
v_RUTA VARCHAR(25))

RETURNS(
  COD_RUT VARCHAR(4) ,
  NOM_RUT VARCHAR(25))


AS

BEGIN


  FOR SELECT
COD_RUT,
                          NOM_RUT
              FROM RUTA
           WHERE NOM_RUT CONTAINING :v_RUTA


  INTO :COD_RUT,
            :NOM_RUT


    DO SUSPEND;

END;


Segundo: En PowerBuilder

1. Creamos un nuevo objeto DataWindow:


2. Elegimos SQL Select, clic en Next.


3. Clic en el botón Cancel.


4. Clic en Convert To Syntax de la opción Design



6. Creamos un argumento



8. Debemos escribir lo siguiente:

 9. Clic en Next

10. Clic en Finish

 Nota:

1. Para el ejemplo usamos un Stored Procedure Firebird seleccionable (porque contiene el comando SUSPEND).
2. Se ejecuta un Stored Procedure Firebird como si fuera una tabla.

martes, 8 de septiembre de 2015

Cargar campos de un DataWindow a DropDownListBox de otro DataWindow

Tengo una ventana (Window Object) con dos DataWindows (Cabecera/Detalle) donde cargo los titulos de los campos de un DataWindow a un campo DropDownListBox del otro DataWindow. 

El DataWindow que tendra el campo de tipo DropDownListBox es un DataWindow de tipo External el cual tiene la siguiente estructura:



El siguiente código debe ir en el evento Open de la ventana para poder cargar los titulos de los campos del DataWindow Detalle al campo
DropDownListBox del DataWindow Cabecera que es External:
//==========================================================================
// Cargar titulos de los campos de dw detalle

//---------------------------------------------------------------------------------------------------
Long    ll_lastcol, ll_rc = 1, ll_col
String   ls_colname, ls_label, ls_filtro, ls_descripcion = '', ls_columns[]

is_columns[] = ls_columns[]
//---------------------------------------------------------------------------------------------------
// Captura el Nro. de Columnas en el DataWindow
//---------------------------------------------------------------------------------------------------

ll_lastcol = Integer(dw_detail.Object.DataWindow.Column.Count)
//---------------------------------------------------------------------------------------------------
// Llena las Columnas
//---------------------------------------------------------------------------------------------------

FOR ll_col = 1 TO ll_lastcol
    ls_colname = dw_detail.Describe("#" + String(ll_col) + ".Name")
  
    IF dw_detail.Describe( ls_colname + ".visible" ) = "1" THEN
        ls_label = dw_detail.Describe(ls_colname + "_t.Text")
      
        IF ls_label = '!'  THEN
            ls_label =  dw_detail.Describe( "evaluate('wordcap(~"" + ls_colname + "~")',1)" )
        END IF

        ls_label = ls_label
        ls_descripcion = ls_descripcion + ls_label + '~t' + String(ll_rc) + '/'
        is_columns[ll_rc] = Trim(ls_colname)
      
        ll_rc++
    END IF
NEXT


dw_filter.Object.columna.Values = ls_descripcion
 
//==========================================================================

Espero le sea de mucha utilidad, cualquier duda o consulta no duden en escribir a jorgebarzola@gmail.com que les respondere con mucho gusto.

Saludos.

sábado, 24 de septiembre de 2011

Argumentos en DataWindows

Para crear argumentos de recuperación en un DataWindows debemos seguir los siguientes pasos:
  • Ingresar al DataWindows y darle clic a la opción Data Source del PainterBar:
  • Luego clic en Retrieval Arguments de la opción del menu Design:
  • Por ultimo creamos el argumento:

martes, 29 de junio de 2010

DataWindow Composite

El estilo de presentación Composite permite combinar varios DataWindow's en un solo DataWindow. Es especialmente útil si desea imprimir más de un objeto DataWindow en una página.Creando DataWindow Composite:
Para crear un DataWindow de tipo Composite o Compuesto
seguimos los sgtes pasos:
1 - Clic en New del PowerBar, luego en la pestaña DataWindow elegimos Composite y OK

2 - Luego nos mostrara la sgte ventana donde elegiremos los DataWindows que queremos se muestren en nuestro DataWindow Composite, Next y Finish.3 - Luego ya adjuntos los DataWindows deseados, diseñamos el DataWindows Composite a nuestra necesidad.