Download pdf - Tutorial de Power Builder

Transcript

Tutorial Bsico de PowerBuilderArpheanSe permite copia y distribucin siempre que se cite la fuente de procedencia y el autor. Arphean Nih Alls rights reserved [email protected] http://arphean.mirrorz.com Nota: Algunas partes de este manual estn realizadas con la ayuda, informacin y soporte de varios programadores. Agradezco a todos ellos su esmero y trabajo sin los cuales tutoriales como el presente seran mucho mas difcil de llevar a cabo. Se ha creado el archivo .pdf sin contrasea ni protecciones con la nica intencin de facilitarte su lectura y futuros tratamientos, as como de que pueda ser abierto por cualquier versin del reader de pdf. Por ello, ten en consideracin nuestro trabajo y no lo modifiques ni alteres sin consentimiento previo, y, si lo distribuyes, cita siempre su procedencia. Obra altruistamente tal como nosotros te lo ofrecemos tambin altruistamente. Gracias.

ndice Presentacin Crear tu base de datos. Creacin de vnculos ODBC Creacin de tablas. Introduccin de valores en tablas PowerBuilder Creacin de ventanas Creacin y enlace de BBDD desde PowerBuilder DataWindow Generar aplicaciones con PowerBuilder ANEXOS Anexo 1: PowerScript: fundamentos del lenguaje Anexo 2: SQL Presentacin Existen muy pocos libros e informacin en espaol sobre PowerBuilder, por lo que la informacin sobre esta materia es realmente escasa. Por ello, he decidido comenzar a trabajar sobre un tutorial que presente esta RAD de una forma sencilla, para todos aqullos que ya poseen algn conocimiento de programacin. Para que le saques el mayor provecho a este tutorial, es necesario que poseas un conocimiento de los mens y de los conceptos de PowerBuilder, ya que este punto solo voy a tocarlo por alto. Ello es bien facil, puesto que por Internet existen varios documentos y artculos sobre los mens y sus funciones en PowerBuilder. Comenzar diciendo que PowerBuilder es una herramienta muy potente (de las mas potentes que existen en la actualidad para esta tarea, sino la que mas) para desarrollar bases de datos. Por lo tanto, PowerBuilder est orientado, sobre todo y ante todo, a bases de datos. En el presente tutorial desarrollaremos, valindonos de un ejemplo (que es como mejor se aprende) una pequea aplicacin que nos servir para trabajar con una base de datos, acceder a ella, y realizar ciertos trabajos con sus datos. Trabajaremos con PowerBuilder en su versin 10.5, si bien, aunque tu versin sea algo ms atrasada no importa, siempre y cuando no sea inferior a la 8.0 los cambios son mas que nada estticos. El tutorial est profusamente ilustrado, de manera que resulte mas fcil y rpido el aprendizaje.

1

Personalmente las versiones de PowerBuilder que considero mejores son las 5.0 y 6.0, creo que son las mas rpidas y las ms estables. No obstante, los tiempos actuales ponen sus modas y esto ha hecho que PowerBuilder haya cambiado y empeorado, en algunos aspectos, bajo mi punto de vista. An as, contina siendo la mejor herramienta para aplicaciones de bases de datos.

Crear tu base de datos. En casi todas partes inician su trabajo presentandote a PowerBuilder y su ambiente de trabajo, y creando mas tarde las bases de datos. Creo que es un error, ya que mezclan conceptos y, didcticamente, es mas enrevesado de entender. PowerBuilder es una RAD, es decir, una aplicacin de desarrollo. Las bases de datos son otra cosa, y no deberan mezclarse, ya que podemos con trabajar con bases de datos ya creadas, del cliente, o que nosotros vayamos a crear despus. Y tal cosa a PowerBuilder no le importa en absoluto, porque es algo externo a l. Nosotros vamos a crear la base de datos con Sybase Central, una herramienta que se incorpora en la suite de PowerBuilder. Podemos crear las bases de datos de forma independiente, esto es totalmente flexible. Sin embargo, para un conocimiento ms profundo de lo que estamos haciendo, creo que es la mejor forma de empezar. Sigamos la ruta siguiente para abrir Sybase Central: programas/sybase/SQL Anywhere 9/Sybase Central. Nos aparecer una pantalla como esta:

Vamos a empezar a construir la base de datos:

2

Hacemos clic en el tree view de la izquierda, seleccionamos adaptative server anywhere 9 (aqu estamos eligiendo un tipo de servidor virtual), y seleccionamos la pestaa de la parte derecha que lleva por nombre Utilities. Si trabajas con una versin anterior de Sybase Central, puede ser que las opciones no estn como aqu las ves, pero s que estn, y son las mismas. En versiones anteriores, por ejemplo, las Utilities las tienes en el propio Tree View, pero es lo mismo y cumplen la misma funcin. Elegiremos, con doble click, el campo Create Database. Aparece el siguiente cuadro de creacin de base de datos:

A continuacin, introduce los datos tal como siguen:

3

Nos informa que se va a proceder a la creacin de la base de datos localmente (en la computadora), por lo que un servidor local, como hemos dicho antes, ser iniciado automticamente. Caso de que deseemos crear la base de datos en un servidor (si estuviramos conectado al mismo), nos aparecera en el listado inferior. Ahora nos pregunta dnde vamos a guardar la base de datos, junto con el nombre del archivo, fsico, que esta va a recibir. Pon el mismo nombre que ves en la imagen:

4

Le damos a Next y aparece la siguiente pantalla:

5

Aqu no hay nada que aadir, la explicacin es suficientemente clarificante. Sigamos: Le damos a Next en la siguiente pantalla, y seguimos dndole a Next hasta que aparezca:

Nos pide que confirmemos instalacin para acceso a base de datos con profiles Java (JDBC driver), en caso de que no lo tengamos instalado. Como estos accesos Java suelen ser bastante lentos y, por el momento, conflictivos y arcaicos, lo mejor es que no instalemos nada, por lo que desmarcamos la casilla y pulsamos en Next.

Deje los campos como en la imagen, y pulse Next:

6

Sigamos dndole a Next, para dejar todas las opciones por defecto (que no deberan modificarse a no ser que lo deseemos expresamente por alguna razn), hasta que nos encontremos con la siguiente pantalla:

Llegados a este punto cabe destacar que es conveniente que anotemos, bien en un papel o en aplicaciones independiente, como RakEdit, todos los datos con los que estamos configurando nuestro acceso a base de datos y nuestra propia base de datos. Esto es primordial para modificaciones futuras, o para facilitarnos los trabajos de reestructuracin o remodelacin que puede que tengamos que llevar. Le damos al botn Finish para concluir la creacin de la base de datos. Ahora Sybase Central proceder a crear la base de datos propiamente dicha, a guardarla en disco, y a iniciarla. Si todo ha ido bien, nos tendr que aparecer un mensaje como este:

7

Ya podemos ver la base de datos creada y conectada desde Sybase:

Creacin de vnculos ODBC Ahora vamos a crear el vnculo ODBC que servir de enlace con nuestra base de datos, aunque hay que mencionar que esto tambin puede ser llevado a cabo desde PowerBuilder. Aqu explicaremos un procedimiento, pasando, una vez estemos en el entorno de PowerBuilder, a explicar el otro, para que as sepas los pasos de todos. Para ello, volvemos a pinchar en Adaptative Server Anywhere, pestaa (o tab, para los puritanos) Utilities, y seleccionamos, en lugar de Create Database, como hemos hecho antes, la ltima opcin de la List, que es Open ODBC Administrador:

8

Le damos doble clic y nos aparece una ventana como la siguiente:

Bien, no nos asustemos, aqu nos aparecen muchas cosas (y algunas que son basura de mi propio ordenador, tranquilos). Esta es la gestin de todas las bases de datos, desde aqu podremos eliminarlas y gestionar sus accesos. Nosotros le damos al botn Agregar del tab DSN de usuario (el primer tab):

9

Seleccionamos Adaptative Server Anywhere 9.0 (u la versin del ASA con que estemos trabajando), y le damos al botn Finalizar. Nos aparece una ventana con muchas cosas, as que tranquilidad, que an ni hemos abierto PowerBuilder ni siquiera hemos enlazado el ODBC con l, de modo que paciencia, que el mundo no se hizo en dos dias:

Data source name es un nombre para los datos, y Description es eso, solamente una pequea descripcin de la base de datos. Rellene los campos tal como ve aqu:

10

En la siguiente pestaa nos solicitar un login y un password. Esto es muy importante, y son los datos de acceso que usaremos despus con PowerBuilder, de modo que recuerde anotarlo todo:

Nosotros pondremos como en la figura, es decir, en UID (user ID) DBA, y en Password, SQL.

Vayamos a la siguiente pestaa. Aqu nos pide que introduzcamos el archivo bd (base data) que hemos creado antes con Sybase, o que ya tengamos en disco previamente. Lo localizamos y se lo introducimos. En Database name le vamos a poner basedatos2, como hicimos al crearla. Las dems son opciones que no necesitamos, por lo que le damos al botn Aceptar para finalizar el enlace ODBC. Nos aparecer nuestra nueva base de datos en la DSN de usuario:

11

Cabe sealar que, en algunos casos, deberemos tambin incluir la base de datos en el DSN de sistema. Si es as, solamente tenemos que seguir los pasos ya explicados, pero en la segunda pestaa. Si nos hemos equivocado en algo, o queremos modificar algo, solamente tendremos que elegir la base de datos por su nombre, y seleccionar el botn configurar. Creacin de tablas. Como es de suponer, una base de datos no sirve de nada si dentro no posee informacin almacenada. Por ello, vamos a crear dos sencillas y simples tablas en donde aadiremos datos. Como an tenemos Sybase Central abierto (y si lo has cerrado, tendrs que abrirlo de nuevo y conectarte a la base de datos de nombre basedatos2 desde la ruta file/connect , teniendo, previamente, seleccionada en el tree view el Adaptative Server Anywhere 9). Antes de crear las tablas, refresquemos la memoria sobre lo que son y cmo se organiza la informacin en ellas. La tabla de una base de datos es una coleccin de informacin homognea (relacionada entre si). Los elementos de esta informacin se denominan registros, cada registro esta conformado por idntico nmero y tipo de campos. Cada campo tiene asociado un nombre; por el que se identifica, y un tipo de dato, que especifica la informacin que podr almacenar dicho campo. Una Tabla puede tener 0 o ms registros y la definicin de un registro deber contar con al menos un campo. Clave Primaria La clave primaria ('Primary Key') es el(los) campo(s) que permiten identificar a un registro. Clave Fornea

12

La clave fornea (Foreign Key) es un(os) campo(s), cuyo valor(es) deben estar presente en otra Tabla y los campos de esta segunda Tabla deben ser (o formar parte) de la Clave primaria. Esto ltimo permite definir una relacin de integridad entre los datos; la existencia de el dato en la primera Tabla esta condicionado a la existencia de el(los) mismo(s) dato(s) en la segunda Tabla. Indices Los ndices ('Index') se definen para mejorar la bsqueda y seleccin por parte del motor de Base de Datos. Una Tabla puede tener varios ndices definidos, o tener ninguno. Cada ndice se crea para uno o ms campos, estos ltimos se llaman "Indices compuestos". Toda esta gestin la llevaba muy fluidamente a cabo PowerBuilder hasta su versin 8.0, aproximadamente. A partir de ah la configuracin y definicin es bastante mas compleja y es muy facil perderse. Nosotros vamos a crear tres tablas. La primera almacenar una serie de usuarios y, dependiendo de esos usuarios, aparecern unos datos u otros. La segunda almacenar unos niveles por los que esos usuarios tendrn privilegios o no. Es decir, en la tabla Usuarios incorporaremos: usu_nivel usu_login usu_pass usu_activo usu_num En la tabla Privilegios incorporaremos: priv_nivel priv_descripcion Este es un ejemplo bastante comn de acceso por niveles, y se suele usar en diferentes tratamientos de bases de datos.

Para crear la tabla, vayamos a Sybase Central, seleccionamos nuestra base de datos (basedatos2), despus la carpeta Tables, y pulsamos el icono new table, o tambin podemos hacer lo mismo con clic derecho sobre el campo Tables de la derecha. En cualquiera de estas formas, nos aparecer lo siguiente:

13

El nombre de la tabla, y le seguimos dando a Next, dejando todos los valores sin modificar nada, hasta que tengamos los campos de la tabla listos para editar. Por defecto, el primer campo ser una clave primaria, por lo que no podr estar repetido. Esto, por supuesto, es opcional, pero a nosotros nos viene de perlas. Introduce los campos tal como estn a continuacin:

Para ingresar nuevas columnas, pulsa con el botn derecho del ratn sobre la tabla:

Al final de la introduccin de los datos, debers guardar los cambios pulsando sobre guardar tabla:

14

Ahora procedamos a crear la tabla de Privilegios. Aunque en la figura no aparezca, sealemos como clave Primary Key (PKey) el campo priv_nivel:

Introduccin de valores en tablas Tras ello, vamos a rellenar los registros, introduciendo una serie de datos. Para ello, podemos editar las tablas desde el ltimo tab (Data), y pulsando sobre el botn + o con clic derecho sobre el campo vaco:

En la tabla Privilegios introduciremos:

En la tabla Usuarios introduciremos:

Bien, ya tenemos nuestras tablas creadas y podemos empezar a trabajar con ellas sobre PowerBuilder.

15

PowerBuilder Lo primero que tendremos que hacer es crear un espacio de trabajo (workspace). Clic en archivo/nuevo y seleccionamos Workspace (el primer tab). Nos pedir un nombre, lo guardaremos como ws_bd2. Una vez creado nos aparecer en el tree view:

Creamos ahora la aplicacin propiamente dicha, sobre el workspace. Nuevo y seleccionamos el segundo tab (target), y el icono Application:

Rellene los campos de la ventana de la aplicacin tal como aqu aparecen:

Podemos desplegar el TreeView, donde nos aparecen todos los archivos y complementos de la aplicacin, junto con todo lo que esta incorpora:

16

Podemos acceder al nombre de todos sus eventos y propiedades que contenga, desplegando las carpetas bajo el nombre de la propia aplicacin (aunque esto no siempre funciona, esperemos que en futuras versiones corrigan ciertos bugs del IDE). Creacin de ventanas Insertemos ahora una ventana, donde iniciaremos los parmetros de nuestra aplicacin de acceso a bases de datos. Para ello, vayamos a New, pestaa PB Object (Power Builder Object) y seleccionamos Window. En Propiedades (a la derecha), pongamos de nombre Ventana Inicio. Pulsando el botn Guardar (arriba, a la izquierda), le ponemos de nombre a la ventana w_inicio:

Procedamos ahora al diseo de la ventana de acceso tal como sigue:

17

El primer Single Line Edit lo llamaremos sle_login, el siguiente (el del Password), lo llamaremos sle_pass. En properties (propiedades), clickearemos el box mask para activarlo, de modo que cuando introduzcamos el password las letras no se visualicen como tales. El botn Aceptar lo llamaremos cb_aceptar, y el Cancelar, cb_cancelar. Al botn Aceptar le activaremos el check default. Ahora crearemos otra ventana, y la llamaremos w_principal. Ser una de las ventanas principales de nuestro programa. Para ello, procedamos como en la ocasin anterior, desde el botn new. Una vez la tengamos creada, volvamos a la ventana anterior, de inicio, y seleccionamos el botn Aceptar. Clic sobre l y seleccionamos el tem script:

Se nos abre el editor de PowerScript con el evento clicked() (que saltar al ser pulsado el botn) seleccionado. Escribamos en l el cdigo que viene a continuacin:

18

Aqu le estamos diciendo que acceda a la base de datos y compruebe si el login y el password, almacenados en los registros de ella, son correctos. En caso de que los datos sean correctos, nos abrir una ventana para gestionar la tabla de Usuarios (ventana que haremos mas adelante). Creacin y enlace de BBDD desde PB En DSN le decimos el nombre de nuestra base de datos. Caso de haberla nombrado basedatos2, o base2, etc., deberemos escribirlo ah. DBA es el user, y SQL, el password para bases de datos en ASA 9. Pero antes de llevar la tarea a cabo, vamos a enlazar la base de datos con PowerBuilder:

En la barra de herramientas, seleccionamos DB profile (perfil de base de datos). En el cuadro que nos aparece, seleccionamos ODB ODBC profile, y le damos al botn New:

19

Rellenamos los campos tal como aparecen aqu, teniendo cuidado en que el nombre y el password sea el que nosotros le hayamos puesto. Dado que le hemos puesto antes DBA de user, y SQL de password, es lo que deberemos incluir (no como est en la imagen):

En la pestaa Preview nos aparecen los datos de la conexin, con la posibilidad de copiarlos para que los podamos usar en nuestras aplicaciones:

20

Podemos realizar un test de conexin, para ello, pulsamos el botn Test Connection y seleccionamos la base de datos a la que queremos conectarnos:

21

Si la conexin se ha realizado con xito, aparecer el siguiente mensaje:

Seleccionamos ahora el icono DataBase, para enlazar la base de datos con PowerBuilder:

Seleccionamos nuestra base de datos:

22

Y le damos al botn conectar (previamente deberemos desconectarnos de la base de datos en el Sybase Central, as como cerrar el programa para trabajar mejor):

Con el botn derecho del ratn sobre la base de datos, tendremos los mismos datos que desde el DB Profile. Cabe mencionar aqu que en estas ltimas versiones de PowerBuilder el trabajo desde el Database es bastante frgil, quedando fcilmente bloqueadas o colgadas, cosa que no ocurra en las anteriores versiones del programa. Prueba de ello es que mensajes como este te resultarn familiares, algo impensable hace solo algunos aos en esta herramienta:

DataWindow Vamos a aadir ahora un objeto Data Window, que es el que nos proveer de acceso a los datos propiamente dichos. Ello lo podemos realizar desde new/data window:

23

Ahora deberemos seleccionar un tipo. Para el ejemplo elegiremos Grid. La manera de bsqueda de datos elegiremos Quick Select, que es el ms rpido y sencillo:

Ahora nos pedir que seleccionemos la tabla, o tablas, de la base de datos, junto con una serie de opciones simplemente visuales. Al final, se abrir una ventana como la que sigue:

24

Esta ventana est construida a partir de componentes XML, lo cual es una novedad de las ltimas versiones. Esta clase de presentacin, an a pesar de ser muy vistosa, deja bastante que desear desde el punto de vista prctico. Se pueden mover, redimensionar y desplazar todos los elementos visualmente, tecleando con el ratn y moviendo sus cuadros, dando una presentacin de tal como quedar en tiempo de ejecucin. Se nos activar tambin la barra de herramientas para facilitarnos ciertos cambios de insercin, movimiento y dems en el objeto de bbdd:

Ahora vamos a proceder a la creacin de la ventana w_principal, que nos presentar los datos de la tabla Usuarios. El aspecto ser el siguiente:

25

Incorporaremos tres botones, el primero llamado insertar registro ser cb_insertar; el segundo, borrar registro, ser cb_borrarreg; y el tercero, borrar fila, ser cb_borrarfila. Tambin incorporaremos un control Data Window, que llevar por nombre dw_1. El control Data Window es el mas importante en PowerBuilder, y establece una conexin visual de datos entre nuestra base de datos (objeto DataWindow) y nuestra aplicacin (Control DataWindow). El control Data Window est en la paleta de controles, solamente tendrs que elegirlo y redimensionarlo en la ventana:

Ahora, tendremos que decirle con qu objeto Data Window trabajar el control, para ello, nos vamos a la paleta de propiedades, teniendo seleccionado el control DataWindow, y de la ventana que aparece elegimos dw_1 (el nico que debe aparecernos). Fijarse en este punto que, aunque le hemos llamado por el mismo nombre (dw_1) a ambos, son cosas diferentes.

26

Fijmonos tambin que el control DataWindow posee varias opciones que podemos activar en su paleta de propiedades, activemos por tanto los checks HScrollBar y VScrollBar, para que se visualicen las barras de desplazamiento. Ya podemos ejecutar la aplicacin. Pero antes, vamos a depurarla y compilarla pulsando sobre el icono:

Tambin podemos previsualizar las ventanas desde el modo diseo pulsando sobre:

Esta forma de previsualizacin de los modos de diseo es una de las mejores cualidades que siempre ha tenido PowerBuilder. Ya podemos ejecutar la aplicacin clickeando sobre el icono de Run:

Si todo ha ido bien, tras poner nuestro nombre de usuario y contrasea (nombre y pass que deben haber sido aadidas previamente a la tabla de la base de datos, como es obvio) nos aparecer la ventana w_principal.

Pero los datos no se visualizan en el control DataWindow, verdad? Por supuesto. Para que esto ocurra, debemos indicrselo expresamente al control. Volvamos al programa y eliminemos, o pongamos como comentario, las siguientes lneas de cdigo del botn Aceptar en la ventana w_inicio:

27

Ahora realiza un doble clic sobre la Aplicacin basedatos2 (o el nombre que t le hayas puesto), y escribe lo siguiente en su evento Open:

Como le hemos quitado la llamada a la base de datos en el evento Clic del botn, se la hemos puesto aqu, y con esto le decimos que se conecte mediante SQLCA haciendo una llamada al objeto Transaccin. Este objeto controla en todo momento los accesos a la base de datos, y recoge los posibles errores. Para ello, hemos usado tambin un messagebox. SQLCA es el acrnimo de SQL Communications Area, y es el objeto de transaccin que utiliza por defecto PowerBuilder. Tal como hemos aadido la conexin a la base de datos al abrir la aplicacin, deberemos desconectarnos de ella al salir, por lo que, sin salir del editor, y en el evento Close escribimos:

Ahora vayamos al cdigo de la ventana w_principal. Lo primero que deberemos hacer es conectar el DataWindow a la base de datos. Para ello, en el evento Open de la ventana, escribimos:

28

Mediante la funcin settransobject, le decimos al DataWindow qu objeto de transaccin usamos. Con retrieve obtenemos los datos y los visualizamos. Prueba ahora el programa y vers como ya se visualiza la tabla de la base de datos. Como ejercicio prctico, cambia ahora el nombre del DataWindow control a dwc_1, de esta forma mas adelante ya no lo confundirs con el Objeto. Presta atencin a que tambin debers cambiar el nombre en todas las llamadas al cdigo que le mencionen, por lo que tal ejercicio te vendr bien para que cojas un poco de soltura con el RAD de PowerBuilder. Vamos a darle un aspecto un poco ms profesional a la aplicacin, haciendo que, mediante una variable global, se personalice el ttulo de la ventana principal. Para ello, retiramos del cdigo de la ventana w_inicio la variable usuario, y la ponemos en la zona de declaracin de variables globales de la aplicacin:

Ahora tenemos que retocar el cdigo del botn Aceptar en el w_inicio, aadiendo, tras la llamada a la apertura de la ventana w_principal ( que es, como se recordar, open(w_principal) ), el siguiente cdigo: w_principal.title=usuario + " Principal" Si despliegas la carpeta de Functions del control DataWindow en el treeview, podrs ver un listado con todas las funciones que dicho control incorpora, incluida retrieve():

29

Esto lo podrs hacer en todos los dems controles u objetos que tengas en tu aplicacin. Vamos ahora con el cdigo de los botones que hemos incorporado. En el evento Clicked del botn insertar registro, escribiremos:

Esta instruccin insertar un registro en la primera fila. Va acompaada del nmero de la fila en la cual insertarse, siendo 1 un registro en la primera fila, y 0 un registro al final. En el botn de borrar registro, por su parte, escribiremos:

Por supuesto, como antes, en el evento Clicked. El nombre del botn lo tienes en la imagen, en la parte superior (cb_borrareg, en este caso), y as como el evento, en el list de la derecha del mismo (clicked(), en la imagen). Ese codigo borrar el registro que est seleccionado. Si lo que deseas es borrar una fila en particular (obtenindola a partir de un SingleLineControl o cualquier cuadro de peticin), debers incluir el nmero de la fila a eliminar, por ejemplo, para eliminar la fila 2:

30

dwc_1.deleterow(2) Para el botn borrar fila realizaremos una pequea modificacin, de forma que podamos manejar, aunque resulte algo engorroso (pero a efectos didcticos, muy til), los datos que el usuario nos introduzca. Crearemos una variable global tal como aqu se ve, en la seccin correspondiente, como aparece en la imagen, sin movernos de la ventana w_principal:

Ahora, junto al botn borrar fila, incorporaremos un SingleLineEdit, tal como aparece en la imagen, y un botn aceptar. A ambos le desactivaremos la propiedad Enabled. Al sle le llamaremos sle_borrafila, y al botn, cb_borrafilaa, que ser el encargado de realizar la accin sobre la tabla:

En el cdigo del botn borra fila incorporaremos:

Mientras que, en el del cb_borrafilaa, haremos:

31

Como se puede ver, el cdigo es muy fcil. Solamente cabe mencionar que llamamos a la funcin de PB IsNumber, que comprueba si lo escrito en el sle es un nmero. Por supuesto, esto es muy bsico, y lo lgico sera implementar un cdigo que comprobara que el nmero es factible, etc. Ahora nos queda la parte mas importante del trabajo con las bases de datos, que es la actualizacin y guardado de sus datos. Para ello, PowerBuilder nos ofrece algunas funciones dentro de su control DataWindow. Insertaremos un botn, al que llamaremos Guardar, y con nombre cb_guardar. En su cdigo de evento Clicked introduciremos:

Commit actualiza la base de datos en caso de que no hubiera ningn error, si se produce algn error, se llama al mtodo Rollback, de modo que los cambios no surtan efecto. Hecho esto, probemos la aplicacin. Si no hay ningn error, la base de datos se actualizar. Ahora probemos a introducir una fila con datos corrompidos, por ejemplo, todo nmeros, y dejemos campos clave sin rellenar. Nos aparecer un error parecido al siguiente:

32

Podemos personalizar los errores a nuestro gusto desde el DataWindow. Para ello, selecciona el control DataWindow de w_principal, y escribe en su evento dberror el siguiente cdigo:

Esto har aparecer un mensaje con el ttulo error, y el testo con el error producido. Return 1 se utiliza para que el mensaje por defecto no se visualice. Introduzcamos ahora un botn en la ventana principal al que llamaremos Buscar Usuario, y le pondremos por nombre cb_busca. A su lado, ponemos un sle con el nombre sle_busca, de una manera parecida a esta:

33

En el evento Clicked del botn introduciremos el siguiente cdigo:

Explicaremos a continuacin su significado: introducimos dos variables, una de tipo long y otra string. En la de string, mediante la funcin Trim, que retirar espacios en blanco del sle, si los hubiera, introducimos el valor del texto que escriba el usuario. La variable cadena_bus es interesante, en ella introduciremos un nmero, que corresponder al de celda, usando el mtodo Find del DataWindow, dicindole que busque en la columna Usu_login, pasndole como parmetro la variable que contendr la cadena a buscar, y, dicindole que comience la bsqueda por la primera celda, es decir, por la 1. Lo dems es solamente una sentencia condicional para tratar los errores que puedan producirse y el resultado. Cabe mencionar aqu que el mtodo Find devolver la primera coincidencia que encuentre, caso de estar repetida, la ignorar. Para tratar varias coincidencias podremos crear bucles o diferentes bifurcaciones que las almacenen, o mediante un contador, ir incrementando la celda de 1 en uno, hasta llegar al final, de una forma que podra darnos una idea el siguiente cdigo:

34

DO WHILE var_cont > 0 dwc_1.Find("Usu_login = '" + par_busca + "'" , var_cont, dwc_1.RowCount()) var_cont++ LOOP Vamos a introducir al lado un botn, al que llamaremos cb_buscart, y le pondremos de texto: Buscar por SQL. De esta forma haremos un ejemplo parecido, pero usando solamente SQL. En el Clicked del botn escribiremos:

Explicaremos brevemente el cdigo: declaramos una variable de tipo string a la que llamamos cadena_bus, a la cual, tras hacer una llamada a la columna usu_login de la tabla usuarios, le introducimos su valor, teniendo como regla que cumplir la condicin de que sea igual a lo contenido en el texto del sle_busca. Tras ello codificamos un condicional, que, en caso de encontrarse, nos informar de su existencia, y, si no existe, nos lo dir tambin. Hasta aqu la parte de programacin esencial de bases de datos con PowerBuilder. Ahora mencionaremos la compilacin y distribucin de aplicaciones. Generar aplicaciones con PowerBuilder PowerBuilder es parecido a Java en el sentido de que usa bitecode, y de que posee varios modos de distribuir aplicaciones (mediante dlls, usando objetos COM o bitecode). Todo ello es demasiado extenso y dista bastante de lo que es un manual bsico, por lo que no lo trataremos. Sin embargo, tocaremos el tema de la distribucin de aplicaciones a travs de la generacin de ejecutables para sistemas operativos Windows. Lo primero que hay que realizar, es incluir en un archivo de distribucin genrica (.msi) las libreras y recursos con los que PowerBuilder trabaja. Estos son variados, y dependern siempre de nuestra aplicacin. Por lo tanto, vamos a generar el ejecutable de la aplicacin que realizamos en este tutorial de ejemplo, y empaquetaremos tambin los archivos de recursos de PowerBuilder. Comencemos por esto ltimo. Lo primero, tenemos que abrir la utilidad PowerBuilder Runtime Packager, que est dentro de la ruta de PowerBuilder.

35

Nos aparecer una ventana como la siguiente:

En ella tendremos que elegir las interfaces de bases de datos que queramos cargar, as como otros componentes web y de soporte. Tambin elegiremos la ruta donde queremos general el archivo .msi. Para el ejemplo, elegiremos la misma ruta donde tenemos el archivo .pbw de nuestra aplicacin, sobre la que crearemos una carpeta llamada distribucin, y all ser donde meteremos el archivo .msi. Tambin desactivaremos los checks XML Support, EJB Client, y Rich Text Support, que no necesitamos. Y desactivaremos las interfaces de JDB Interface, Informix y Oracle, que tampoco necesitamos. Una vez hecho esto, pulsaremos el botn Create. Tras unos segundos nos habr creado el archivo en el directorio especificado:

36

Ahora vayamos a PowerBuilder, abramos el WorkSpace de nuestro proyecto (File/Open Workspace) y cerremos todas las ventanas y editores de cdigo que tengamos abiertos, de modo que solo tengamos visible el TreeView con los archivos de nuestro proyecto. Antes de crear el ejecutable, debemos crear un archivo .pbr. El archivo PBR es un archivo de recursos. No es mas que un archivo ASCII en el que deberemos incluir todos los recursos de imgenes de nuestra aplicacin (iconos, etc), as como los objetos DataWindow que hayamos incluido en esta. Podemos incluir imgenes .bmp, .cur, .ico, .wmf, y la forma de hacerlo es la siguiente: icono1.ico imagen_campo.bmp etc., todo ello correlativo. En nuestra aplicacin no vamos a incluir imagen alguna, ni tan siquiera icono, puesto que no lo hemos hecho en tiempo de diseo tampoco, y pienso que es lo suficientemente fcil el hacerlo como para no extendernos mas en el particular. Lo que s debemos incluir es el DataWindow, ya que de otro modo nuestra aplicacin de ejemplo apenas hara nada. Para ello debemos generar un archivo .pbr en ASCII, sin introducir caracteres extraos ni cortes de lneas. Para ello debes usar una herramienta que trabaje siempre directamente en ASCII, como RakEdit, y escribir lo siguiente:

El archivo .pbl es el archivo de proyecto de nuestra aplicacin (puedes verlo en el treeview de PB), entre parntesis debemos poner el objeto DataWindow que usamos, en este caso, nombrado como dw_1. Esto debemos hacerlo si vamos a poner el archivo PBR dentro del directorio donde estn los dems archivos de proyecto de nuestra aplicacin, ya que, en caso contrario, deberemos incluir la ruta completa, por ejemplo esta: c:\aplicaciones\basedatos2.pbl(dw_1) Ahora guardaremos el archivo con extensin .pbr en el directorio donde tengamos el resto de archivos de nuestra aplicacin.

37

En este punto vamos a crear el archivo .pbd, para ello vamos a New y seleccionamos el pintor de librera (Library Painter) del tab Tool.

Esta librera .pbd (PowerBuilder dynamic library) ser llamada en la activacin del archivo ejecutable y en la ejecucin de la aplicacin. Al pulsar sobre OK, nos abrir el listado de nuestro arbol de directorios. Tendremos que ir donde tengamos el archivo .pbl de nuestra aplicacin (basedatos2.pbl) y, con el botn derecho, seleccionamos tal como aparece en la imagen:

Nos aparece la siguiente ventana:

38

Seleccionamos en Browse el archivo .pbr que hemos creado, y le damos a OK. Ya tenemos generado el pbd. Cerramos las ventanas del Library Painter y procederemos a crear el ejecutable propiamente dicho. Para ello vamos a New y en el tab Project elegimos Application:

Nos aparecer la siguiente ventana:

39

En ella elegimos un nombre para nuestro archivo ejecutable, despus, dndole al botn (), seleccionamos el archivo PBR que hemos creado antes. Asimismo, activamos la casilla PBD y volvemos a seleccionar el archivo pbr. Como se puede ver, esta es otra forma de generar el PBD, ya que nos lo habr creado al activar la casilla PBD en caso de que no lo tuviramos o/y lo necesitramos. Para generar el ejecutable seleccionaremos de la barra de herramientas el botn Deploy. Podemos darle un nombre y guardar el proyecto tambin desde ah.

Ahora nos habr creado un archivo exe en el directorio donde tengamos los dems archivos de la aplicacin que hemos diseado:

Si efectuamos doble clic sobre el archivo, nos aparecer el programa listo para ser usado:

40

Hasta aqu el ejemplo bsico de este tutorial sobre PowerBuilder. Confa en haberte ayudado a entender y a trabajar sobre esta potente herramienta de creacin de aplicaciones para bases de datos. A lo largo de sus captulos hemos visto desde cmo crear bases de datos, incluidas sus tablas e introducir datos en las mismas, hasta enlazarlas con los drivers ODBC, bien desde Sybase Central o desde PowerBuilder. Tambin hemos diseado una aplicacin, que conecta a la base de datos, comprueba datos de acceso y lee y actualiza sobre una tabla de ejemplo. Asimismo, hemos visto como realizar una sencilla bsqueda y como, finalmente, distribuir y crear el ejecutable. Para todo ello hemos usado en total cuatro aplicaciones, como son el propio PowerBuilder para el diseo y trabajo principal, Sybase Central para la base de datos, el PowerBuilder Runtime Packager para los archivos de soporte en PowerBuilder, y el RakEdit para la creacin de un archivo PBR en ASCII. ANEXOS Anexo 1: PowerScript: fundamentos del lenguaje. Comentarios: // comentario de una lnea /* comentarios de varias lneas */ Palabras reservadas:

41

Arrays: integer arr_b[4] (arr_b[1], arr_b[2], arr_b[3] y arr_b[4] se inicializan a cero) Estructuras: Ejemplo: persona yo yo.nombre= "Alvaro" yo.apellido="Suarez" yo.edad= 10 if yo.edad5) Cualquier combinacin de lo anterior, implcitamente indica un OR. (ej.1, 3, 5, 7, 9, 27 TO 33, IS >42) Bucles: For: for i= 1 to 23 j= i + ( j * 1.2 ) next Do: Ej. integer A = 1, B = 1 //Emite un pito por los parlantes hasta que la variable DO UNTIL A > 15 // A sea mayor que 15. Beep(A) A = (A + 1) * B LOOP integer A = 1, B = 1 //Emite un pito por los parlantes mientras la variable DO WHILE A 3 THEN CONTINUE MessageBox("Hola", "B es = " + String(B) ) LOOP Sentencias referentes al mbito en que nos encontremos: This Indica el objeto en el cual se esta codificando. Ej. this. Text = "hola" Parent Indica el objeto que contiene uno particular donde se esta codificando Close( parent ) Anexo 2: SQL Alter Table: Permite aadir una o mas columnas a una tabla existente. Las columnas nuevas de los registros que ya existan se rellenarn con valores nulos. Sintaxis: ALTER TABLE nombre_tabla ADD nombre_columna tipo_dato ALTER TABLE nombre_tabla (ADD nombre_columna tipo_dato [, ADD nombre_columna tipo_dato, ..]); Ej.: ALTER TABLE usuarios ADD (edad INT); Create Index: Crea un ndice en una o mas columnas de una tabla, mediante las palabras reservadas ASC y DESC se especifica si la columna se va a indexar de forma ascendente o descendente. Si se usa la palabra UNIQUE se esta pidiendo que en caso de alguna coincidencia de un valor en la tabla se genere un error. Sintaxis: CREATE [UNIQUE] INDEX indice ON nombre_tabla (nombre_columna [ASC | DESC] [,nombre_columna [ASC | des], ]); Create Table: Crea una tabla. Sintaxis: CREATE TABLE nombre_tabla (elemento_columna [,elemento_columna,...]); El elemento_columna puede ser una definicin de una columna o una definicin de restriccin de tabla: nombre_columna tipo_dato [DEFAULT expresin] [retriccin_columna [, restriccin_columna, ] UNIQUE (nombre_columna [, nombre_columna, ]) | PRIMARY KEY (nombre_columna [, nombre_columna, ]) | CHECK (condicion_busqueda) | FOREIGN KEY (Lista_de_columnas_a_referenciar) REFERENCES tabla_referida (Lista_de_columnas_de_referencia) REFERENCES tabla_referida (lista_de_columnas_referidas);

45

DEFAULT especifica el valor por defecto que se introducir en la columna. Las restricciones de columnas podrn constar de una de las siguientes palabras: -NOT FULL: especifica que la columna no puede contener valores nulos -UNIQUE: dos filas no podrn tener el mismo valor en esa columna -PRIMARY KEY: la columna representa la clave primaria para la tabla -REFERENCES tabla_referida (lista_de_columnas_referidas): Clave externa. Nos permite un mecanismo que enlaza dos tablas -CHECK condicion_de_busqueda: restringue los valores que se insertan en la columna. Ej.: CREATE TABLE usuarios (id_numero INTEGER PRIMARY KEY, nombre CHARACTER(20), apellidos CHARACTER(40) telefono INTEGER DEFAULT -1); Delete: Borra las filas de una tabla que no cumplan una cierta condicin. Si no se especifica la condicin, se borran todos los registros. Sintaxis: DELETE FROM nombre_tabla [WHERE condicion_busqueda]; Drop Index: Elimina un ndice. Sintaxis: DROP INDEX nombre_indice ON nombre_tabla Drop Table : Elimina una tabla. Sintaxis: DROP TABLE nombre_tabla Insert: Inserta una fila en la tabla. Si introducimos los valores de cada columna en orden, no ser necesario especificar los nombres de las columnas. Sintaxis: INSERT INTO nombre_tabla [(nombre_columna1[,nombre_columna2, ])] VALUES (expresin_columna1[,expresin_columna2,]); Select: Todas las consultas sobre tablas en una base de datos se llevan a cabo con la setencia select. Sintaxis: SELECT [ALL|DISTINCT] lista_de_seleccin FROM tablas [WHERE condicion[subconsultas] ] [GROUP BY nombre_columna [HAVING condicion] [UNION | UNION ALL | INTERSECT | MINUS] seleccion] [ORDEN BY columna [ASC | DESC]]; Seleccin hace referencia a otra sentencia SELECT; ASC en orden ascendente y DESC, descendente. La palabra clave ALL es el valor por defecto y permite que se devuelvan todas las filas del resultado obtenido mediante la sentencia SELECT. DISTINCT, por su parte, eliminar todas las filas que se encuentren repetidas en la tabla. Mediante la clusula WHERE establecemos una condicin de bsqueda; sta podr encadenarse mediante AND u OR. Ej.: SELECT DISTINCT nombre FROM lista WHERE apellido LIKE E% OR apellido LIKE _A%; Este ejemplo devolver todos los nombres que pertenezcan a una lista cuyos apellidos empiezan por E o por A. La condicin de bsqueda podr estar formada por:

46

expresin operador expresin | expresin LIKE patron | nombre_columna IS [NOT] NULL LIKE permite especificar un patrn, los posibles son: %: que significa ninguno o mas caracteres. _: que significa que hay un solo carcter Si establecemos IS NULL se devolvern aquellas filas que estn o no vacas. Si es IS NOT NULL se excluirn aquellas filas que estn vacas. La condicin de bsqueda de una forma ms compleja podr estar compuesta tambin de la siguiente forma: expresin BETWEEN expresin AND expresin | EXISTS {subconsulta} | expresin [NOT] IN {subconsulta} | expresin operador {ALL | ANY} subconsulta BETWEEN nos permitir especificar valores que se encuentran en un intervalo. Mediante EXISTS se seleccionar la tupla de la consulta principal si la subconsulta devuelve algn valor. Con EXISTS es frecuente usar subconsultas anidadas correlacionadas entre s. El tipo IN se usa para seleccionar todas las filas para las que el valor de una columna se encuentre (o no ) en el resultado de la subconsulta. Mediante ALL se seleccionarn todas las tuplas que cumplan el comparador para todos los valores del conjunto asociado a la clusula ALL (la subconsulta). Con ANY se seleccionar la tupla si se cumple el comparador para alguno de los valores del conjunto asociado a la clusula ANY (la subconsulta). Un ejemplo de consulta SELECT que retornar los datos de todos los usuarios, ordenador por el campo nombre, que se llamen Javier o que tengan como primer apellido Suarez es: SELECT * FROM usuarios WHERE nombre=Javier OR apellido=Suarez ORDEN BY nombre. Update: Actualiza las columnas de una tabla. Sintaxis: UPDATE nombre_tabla SET nombre_columna={expresin | null} [, nombre_columna={expresin | null} WHERE condicion Nota: Corchetes [] : indican que lo que hay dentro de stos es opcional Barra vertical | : indica que se debe elegir una entre las opciones o parmetros que se presentan Puntos suspensivos : indica la posibilidad de repetir los elementos o las sentencias. Arphean.

47