Está en la página 1de 17

Power Builder Clase 4

Las instrucciones dw_1.settransobject(sqlca); crean una conexin transaccional a la tabla implicada, que en este caso es agenda, note que dw_1 es el nombre del objeto al cual tenemos apuntada el SELECT que lo creamos con el pintor, la segunda instruccin dw_1.retrieve(); lee los registros segn la sentencia SELECT, con retrieve() se pueden traer los registros segn como tengamos el WHERE en el SELECT, enviando parmetros hacia el SELECT. Recuerde que en clases pasadas hablamos de SQLCA. Nuestro siguiente paso es crear un objeto data object para la segunda datawindow, recordar que en la segunda datawindow es donde ingresaremos los datos o los modificaremos. Presionar CTRL + N, DATAWINDOW seleccionar FREEFORM SQL SELECT SELECCIONAR LA TABLA AGENDA SELECCIONAR TODOS LOS CAMPOS ICONO RETURN NEXT FINISH

Cambiemos el aspecto y alguna de las propiedades, colores y bordes, los tab order a cero entre otros.

Grabemos el objeto como d_agenda1 en la librera que tiene de nombre datos y asociarla a la datawindow

Ajustar la datawindow de tal manera que luzca y que se pueda ver un solo registro, quitar los cheques a LIVESCROLL, grabar y ejecutar la aplicacin, moverse de un registro hacia el otro y ver que pasa. Si observas la segunda datawindow no hace nada, sencillamente porque no la hemos sincronizado, para sincronizarla debemos abrir el evento OPEN y codificar en el script Dw_1.sharedata(dw_2) Con esto le estamos diciendo que la datawindow1 compartir datos con la datawindow2, ejecutemos nuevamente la aplicacin. Cada ves que escribas cdigo lo puedes COMPILAR, observa el icono que est a la par de los larga vistas.

Como pudiste observar, al cambiarse de un registro a otro no refresca la segunda datawindow, esto es porque no se sincronizado que cuando cambie un registro arriba refresque tambin en la segunda, esto lo logramos con el evento ROWFOCUSCHANGED. Digitar el siguiente script en el evento ROWFOCUSCHANGED de la dw_1 dw_1.SelectRow(0,false)

dw_1.SelectRow(currentrow,true) dw_1.scrolltorow(currentrow) dw_1.setrow(currentrow) dw_2.scrolltorow(currentrow) De esta manera le indicamos que no seleccione y que seleccione el registro que en ese momento sea el actual, pintndolo y hacemos que salte al registro scrolltorow y setrow hacen lo mismo, el scrolltorow a la segunda datawindow hace que haya sincrona, este evento se dispara cada ves que el registro cambia. Currentrow es un parmetro que es pasado al evento.

Notar que en ambas datawindow la modificacin de los datos es cero, porque los TAB ORDER son cero. Aumentemos al evento OPEN de la ventana un puntero o indicador de registro a la primera datawindow, escribir dw_1.setrowfocusindicator(hand!)

Pero antes, ya que tendremos una mano apuntando al registro, debemos correr los datos para que la mano no los tape, recuerde que podemos justificar el datos a la derecha. Ejecutar la aplicacin

Existe una manera rpida, pero poco usual de poder crear botones automatizados para desplazarse o navegar en la tabla, as, como para insertar, eliminar y actualizar registros, desde la datawindow. Modifiquemos la segunda datawindow, y ensanchemos de tal manera que quepan unos botones y vayamos al pintor de la DW. Aumentemos un par de botones para avanzar y retroceder registros. Ubicarse en el primer botn, en las propiedades seleccionar ACTION y seleccionar PAGE NEXT , chequear action default picture, quitar el texto(none), hacer lo mismo para el segundo botn PAGE PRIOR, debera lucir as

Observar que estos botnes no tienen cdigo, sin embargo, tienen un script predeterminado que genera una accin, aumentar otros dos botnes para primer y ltimo registro y ejecutar la aplicacin, notar que pasa con los registros y las dos datawindows.

La respuesta a esto es sencillo, los botones son aplicables a la segunda datawindows solamente, recuerde que la sincronizacin la tenemos en el evento rowfocuschanged de la primera datawindow. Ahora, aumentemos dos botones ms uno para filtrar y otro para ordenar columnas de una manera rpida, a partir de la datawindow.

Si hacemos clic sobre el filtro, PB nos permite seleccionar entre los campos de la tabla, en la cual hay que establecer una expresin, esta expresin la podemos verificar por ejemplo, ver la siguiente expresin.

El filtro se puede escribir o hacer clic sobre el campo y terminar de especificarlo la expresin, verifiquela para ver si es correcta y observe como funciona el retrieve().

El filtro se aplica con el criterio que se ha dado, si queremos quitar el filtro o cambiarlo debemos volver a hacer clic sobre el botn, por ejemplo quitemos el criterio antes puesto.

El retrieve() vuelve a su estado original, hacer lo mismo para el ordenamiento, se puede ordenar por una o varias columnas ya sea ascendente o descendente, arrastrar los campos a ordenar.

Observar el orden en la primera datawindow, para quitar un ordenamiento simplemente quitar los campos involucrados del ordenamiento. Ok, ahora, aumentemos un botn ms a la datawindow, botn insertar y vamos a analizar ciertas consideraciones y efectos.

Notamos que al hacer clic en este botn aparentemente no hace nada, porqu?, porque los TAB ORDER se encuentran a cero, editar la datawindow y cambiarlos a 10, 20 y 30, grabar lo cambios y ejecutar la aplicacin nuevamente, observar que sucede.

Un nuevo registro es adicionado, pero no ha sido salvado o grabado realmente, esto lo podemos notar si cerramos esta ventana y volvemos a entrar en ella.

Porqu? Porque, cuando trabajamos en una tabla de una DB se hacen transacciones que pueden ir de una a varias, si recordamos establecimos una va SQLCA, existen dos comandos transaccionales que son utilizados para poder grabar estas transacciones en la DB o para ignorar las transacciones, ellas son COMMIT y ROLLBACK. COMMIT es utilizado para registrar en DB las transacciones INSERT, DELETE, UPDATE, etc., y ROLLBACK para ignorar las transacciones, comnmente son utilizadas cuando todo salio bien COMMIT y cuando no se completo una accin o se dio un problema ROLLBACK . Aumentar tres botones ms, uno para eliminar, cancelar y el ltimo para grabar(actualizar), separar los botones con los de filtrar y ordenar.

Muy bien, ahora tenemos completa nuestra aplicacin, la cual tiene grandes deficiencias de habilitacin y desabilitacin de botones y otros aspectos, las cuales empezaremos a corregir en la siguiente clase.