Docsity
Docsity

Prepara tus exámenes
Prepara tus exámenes

Prepara tus exámenes y mejora tus resultados gracias a la gran cantidad de recursos disponibles en Docsity


Consigue puntos base para descargar
Consigue puntos base para descargar

Gana puntos ayudando a otros estudiantes o consíguelos activando un Plan Premium


Orientación Universidad
Orientación Universidad


Apuntes sobre Power Builder, Apuntes de Metodología de Programación

Apuntes de Metodología y Tecnología de la Programación sobre Power Builder, Trabajando con una nueva ventana, otros íconos que se generan al tener abierta una ventana, Controles de ventana y sus prefijos.

Tipo: Apuntes

2013/2014

Subido el 23/01/2014

el_pancho
el_pancho 🇲🇽

4.4

(114)

577 documentos

1 / 44

Toggle sidebar

Esta página no es visible en la vista previa

¡No te pierdas las partes importantes!

bg1
Curso de Programación VI (Power Builder)
(Apuntes de clase y F1 de la herramienta)
ULACIT ´2000
Creado: 18 de mayo de 2000
Modificado: 9 de Julio de 2000
Introducción
El uso de esta herramienta de desarrollo de software está destinada hacia el lenguaje de manipulación (DML)
en cerca de un 80%. Por lo que su interacción con motores de bases de datos es muy extensa; principalmente a
través del objeto Data Windows que posteriormente se discutirá ampliamente.
Un detalle importante en relación a los S I es que, siempre que se pueda las reglas del negocio deben estar
presentes en la definición de los modelos de datos, para de esta manera hacer más ágiles las modificaciones
que a futuro se le tengan que hacer a los S I de la organización.
Ahora bien, con relación a los motores de bases de datos, es importante destacar que un motor puede ser
accesado desde una herramienta de diseño como lo es Power Builder de dos formas:
Driver nativos: aquí se necesita que tanto fabricante del DBMS como el desarrolador de la
herramienta se pongan en contacto para incluir en la herramienta de desarrollo los drivers nativos del
Sistema Gestor. Esto tiene la ventaja que entonces al sistema gestor le serán explotadas casi el 100%
de sus vondades.
Driver ODBC: por otra parte, si no hay contacto entre los proveedores, se puede hacer uso del
sistema Gestor mediante conexiones ODBC (Open Data Base Conection −Conexiones Abiertas de
Base de Datos−), la deficencia aquí es que no se aprovecha el 100% tanto de la herraimienta de
desarrollo como del sistema gestor.
Nativo
DDL
Driver SQL DML
DCL
ODBC
Toda aplicación en Powel Builder está respaldada en al menos una o más librerías (.pbl). por lo que se
podría afirmar que una aplicación es en realidad un conjunto de una o más librerías.Menú inicial de la
Herramienta
Picture listBox:
Incluye el conjunto de todas las demás opciones que podemos ver en la barra de menú
1
pf3
pf4
pf5
pf8
pf9
pfa
pfd
pfe
pff
pf12
pf13
pf14
pf15
pf16
pf17
pf18
pf19
pf1a
pf1b
pf1c
pf1d
pf1e
pf1f
pf20
pf21
pf22
pf23
pf24
pf25
pf26
pf27
pf28
pf29
pf2a
pf2b
pf2c

Vista previa parcial del texto

¡Descarga Apuntes sobre Power Builder y más Apuntes en PDF de Metodología de Programación solo en Docsity!

Curso de Programación VI (Power Builder)

( Apuntes de clase y F1 de la herramienta )

ULACIT ´

Creado: 18 de mayo de 2000

Modificado: 9 de Julio de 2000

Introducción

El uso de esta herramienta de desarrollo de software está destinada hacia el lenguaje de manipulación (DML) en cerca de un 80%. Por lo que su interacción con motores de bases de datos es muy extensa; principalmente a través del objeto Data Windows que posteriormente se discutirá ampliamente.

Un detalle importante en relación a los S I es que, siempre que se pueda las reglas del negocio deben estar presentes en la definición de los modelos de datos, para de esta manera hacer más ágiles las modificaciones que a futuro se le tengan que hacer a los S I de la organización.

Ahora bien, con relación a los motores de bases de datos, es importante destacar que un motor puede ser accesado desde una herramienta de diseño como lo es Power Builder de dos formas:

Driver nativos : aquí se necesita que tanto fabricante del DBMS como el desarrolador de la herramienta se pongan en contacto para incluir en la herramienta de desarrollo los drivers nativos del Sistema Gestor. Esto tiene la ventaja que entonces al sistema gestor le serán explotadas casi el 100% de sus vondades.

Driver ODBC: por otra parte, si no hay contacto entre los proveedores, se puede hacer uso del sistema Gestor mediante conexiones ODBC (Open Data Base Conection −Conexiones Abiertas de Base de Datos−), la deficencia aquí es que no se aprovecha el 100% tanto de la herraimienta de desarrollo como del sistema gestor.

Nativo

DDL

Driver SQL DML

DCL

ODBC

Toda aplicación en Powel Builder está respaldada en al menos una o más librerías (.pbl). por lo que se podría afirmar que una aplicación es en realidad un conjunto de una o más librerías.Menú inicial de la Herramienta

  • Picture listBox:

Incluye el conjunto de todas las demás opciones que podemos ver en la barra de menú

  • Aplicación:

Power Builder a iniciar cada sesión abre por default la ultima aplición sobre la que se ha estado trabajando

  • Proyect:

Permite tomar una o varias librerías.

Aquí cabe el comentario que para el desarrollo de proyectos es posible (recomendado) guardar todos los objetos visuales(formularios, gráficos, ect) en un .pbl y todos lo objetos(código) no visuales en otro .pbl.

  • Window:

Es el famoso formulario, que premie entre otras cosas comenzar una aplicación.

  • User Object:

Son objetos definidos por el usuario, pueden bien ser ventanas de tipo general, las cuales se puedan usar en distintas aplicaciones, etc.

En este punto hay que distinguir que los objetos definidos por el usuario pueden ser de dos tipos: 1) de clase y

  1. Visuales. Además dentro de cada categoría se pueden escoger si son del tipo estándar −ya tienen la clase definida− o personalizados −aquí el programador se encarga de su definición por completo−
  • Menú:

Se usan principalmente para enlazar ventanas, y mantener la seguridad dentro de la aplicación.

Es decisión del desarrollador en qué momentos desea crear el menú de la aplicación lo cual lo puede hacer en el inicio o bien al final del desarrollo de la aplicación.

  • Structure:

Objeto que permite definir variables de tipos de datos (el famoso Record de otras herramientas).

Existen dos tipo de estructuras:

Generales: Se definen desde el ícono de la barra de menú − sin tener ningún formulario abierto− , estárán disponibles para toda la aplicación; por ejemplo si crearamos una estructura en este punto estaría disponible para toda la aplicación

Locales: Se define desde el menú Declare (Declare | window structures) si se crea una estructura con un formulario abierto está estará disponible solo en el ámbito de ese formulario.

  • Function:

Las que se encuentran disponibles desde aquí son funciones que han sido definidas, como de alcance global (= public) por la aplicación que se tiene en uso.

  • Data Window:

Aquí nos encontramos con dos connotaciones el control Data Window y el objeto Data Window. El segundo será de gran uso para enlazar los requerimientos del control data Window, el cual se crea desde este ícono.

Es un formulario con diferentes leguetas que presenta todos los objetos definidos y creados en la aplicación actual.

  • Library:

Muestra las diferentes librerías de la aplicación.

Este objeto permite entre otras cosas exportar librerías de diferentes versiones, regenerar librerías, y ver y modificar ciertas propiedades de diferentes objetos.

Dentro de una misma librería se pueden tener varias aplicaciones.

  • Edtit:

Para librerías

  • OLE:

Permite agregar objetos del tipo OLE

  • Run:

Permite correr toda la aplicación.

  • Debug

Permite depurar la aplición

  • Run Window:

Permite correr solo la ventana abierta. Si se tienes que hacer acceso a datos de algún modelo esta opción no estará disponible.

Más allá del menú inicial de la herramienta

Una ves que se tiene abierta la última aplicación sobre la cual se trabajó − el menú de trabajo se amplía − , y lo que se desea es crear una nueva aplicación, o bien abrir otra aplicación, se puede hacer esto desde el menú File, escogiendo New, o también sobre el ícono new de la barra de menú.

  • Nueva aplicación:

Lo primero que hace es pedir información sobre la librería que respaldará la aplicación, que por uso general se le da el mismo nombre que posteriormente se le dará a la aplicación.

Posteriormente pide la información requerida para la aplicación en cuestión:

  • Nombre de la aplicación
  • Comentarios de la librería que la reapalda
  • Comentario de la aplicación propiamente dicha
  • Librerías asociadas a la aplicaición.

Una vez que se ha clicado sobre el botón OK se genera un cuadro de diálogo que pregunta si se quiere

genrerar una plantilla base para la aplicaición que se está generando.

Si se responde que sí, se corre un wizard que generará tal plantilla misma que incluirá algunas ventanas básicas, un menú para la aplicación y un área de cominicación con sql (a traes de la variable SQLCA), el cuel posee el código necesario para conectar con cualquier motor de base de datos, pero por default pegará la ultima con la que se trabajó.

Tal vez aquí es importante destacar que en Power Builder, así como muchos otros lenguajes de 4GL, todo objeto tiene dos aspectos que destacar:

  • Propiedades
  • Script
  • Propiedades del objeto APLICACIÓN:

Si se pulsa sobre el ícono propiedades o con click derecho sobre el ratón, se puede ver en modo de lectura algunas de ellas las propiedades del objeto aplicación. Si se desea modifocar alguna que aparezca en modo de lectura se debe hacer dando click sobre el ícono Library el cual ya fue discutido en la sección anterior.

Algunas propiedades por destacar:

  • General:

Aquí se musetra el conjunto de propiedades que se definieron al crear la aplicación más algunas otras que el mismo PB definió en el momento también de generar la aplicación en cuestión.

Icon : el seleccionado aquí será el que se muestre en el ejecutable de la aplicación, una vez que esta haya sido compilada. Los que trae por defecto Power Builder están ubicados en: Archivos de programa PowerSoft ArtGal

Variable Types: cada una de las variables aquí definidas cumle con una función específica y algunas trabajas tambien en conjunto:

SQLCA: (área de comunicación con SQL), Esta variables tienes todos los parámetros necesarios para conectarse con cualquier motor de base de datos.

Si solo se va a conectar con una base de datos en la aplicación no se hace necesario dedinir más variables Transaction.

E.g: connect using SQLCA

ODBC o no

Usuario

Password

Base de datos

Nombre de base de datos

  • SQLDA: ( dinamic area )

Haciendo Aplicaciones Funcionales

El objeto Ventana:

Una forma de agregar una ventana a una aplicación es clicando sobre el ícono de Window que aparece en la barra de menú.

Presenta el cuadro de diálogo Select Window, del que se puede hacer varias cosas:

  • Agregar una nueva ventana. (New)
  • Abrir una ventana ya existente en la aplicación
  • Agregar una ventana de otra librería (Other)

De las ventanas ya existentes se puede ver el comentario asignado a cada una de ellas en el área que el cuadro de diálogo preporciona para ello.

Se puede también heredar una ventana. En este punto es importante hacer notar que una cosa es la herencia y otra muy distinta el copiar una ventana; pues cuando se hereda y se hace un cambio en la ventana principal el mismo se reflejará en la ventana subordinada.

Trabajando con una nueva ventana

Si del cuadro de diálogo lo que se escogió fue crear una nueva ventana, la misma aparecerá sobre el área de trabajo de PB, no es necesario darle nombre en un inicio, pero si es recomendado salvarla de una vez para tener el objeto protegido por cualquier eventualidad que se pueda presentar.

Una ventana como cuaquier otro objeto dispone de una serie de propiedades de las cuales quizá la que merezca discutirse para no dejar espacio a la confución es la propiedad del tipo de ventana:

Main: primer ventana que interactua con el usuario, por fuerza debe llevar marco y título. Puede tambien poseer un menú, son del tipo MDI

  • MDI: son contenedores de ventanas tipo child

MDI frame:

MDI frame Microhelp

Child: ventanas que no pueden salirse del marco de la MDI que la contiene. Si se cierra el padre se cierra el hijo también

Popup: para desplegar listas de valores. Son diferentes a los menú emergentes.. Este tipo de ventana si se puede salir del marco de la tipo MDI que le contiene y si se cierra el padre la Popup puede quedar abierta.

  • Message: para interactuar con el usuario. Detienen la corrida de la aplicación hasta que se cierre.

Dos detalles importantes a manera de comentario es que hay que tener mucho cuidado con el tamaño y color de las ventanas; hay que recordar que no todo el mundo dispone de monitores de 14' ó 16' en 256 ó 512 colores. Muchas veces nos encontraremos con monitores bastante más pequeños como los que poseen los agentes repartidores y que por lo general son de tipo monocramáticos.

En este sentido trabajar con colores bastante suaves y con una resolucion bastante baja. Lo anterior se puede controlar las propiedades de la ventana, las cuales se pueden observar clicando dos veces sobre la ventana. La propiedad que controla esto se localiza en la lengüeta llamada Position. Se podría tener un tamaño definido de

ventana (como un machote− con coordenadas y tamaño, además de colores amistosos − ) y luego solo copiarlo cada ves que se necesite un formulario.

Otra propiedad para destacar sobre las venatnas es Tool Bar; que se refiere a la ubicación dentro de la ventana de un menú que se tenga asociado a ella.

Las propiedades de una ventana las podemos ver clicando dos veces sobre la ventana, dando click derecho sobre la misma y escojiendo propiedades, en el menú Edit escojiendo propiedades, secogiendo el ícono de properties sobre la barra de menú, entre otros.

Por otra parte el objeto ventana también dispone de una serie de eventos a los que se les puede dar un código (= script ) funcional.

La forma de agregar código a una ventana es dar click derecho y escoger Script con el mouse, o bien en el menu Edit escoger Script, o bien escoger el ícono de script sobre la barra de menú, entre otras.

Algunos otros íconos que se generan al tener abierta una ventana

Los íconos que se describirán son los que se musetran cuado se tienes visible el formulario

  • New : genera una nueva ventana
  • Open : presenta el cuadro de diálogo que se presenta cuando se da click sobre el ícono Window
  • Save : salva la ventana actual Picture ListBox : presenta los objetos de ventana que se pueden agregar a la ventna que se encuentra activa
  • Undo : remueve la ultima acción efectuada sobre la ventana
  • Clear :
  • Align left edges : aopciones para alinear
  • Script : muestra el script de la control activo
  • BackGround Color: color de fondo
  • ForeGround Color: color de relleno
  • No border: elimina bordes
  • Properties: del control activo
  • Tab order: para determinar el orden en que se le irá dando el foco a cada control de la ventana activa
  • Preview: mustra como se verá la ventana activa según las propiedades actuales
  • Close: cierra la ventana activa

Controles de ventana y sus prefijos

Control Prefijo Command Button Cb_ Picture Button Pb_ Check box Cbx_ Radio Button Rb_ Static Text St_ Picture P_ Group Box Gb_ Line Ln_ Oval Oval_ Rectangle R_

sucesos controles de cada réplica de un objeto pueden compartirse.

Para declarar una varialbe compartida se pulsa Declare | Shared Variables, y se detalla la varialbe compartida

Ambito global: la aplicación completa puede acceder a las varialbes globales. Estas variables nunca se salen de ámbito hasta que se cierra la aplicación.

No se deberías usar variables globales si se emplea otro tipo de variables, usándolas se viola el principio de encapsulación; en otras palabras, si se establece una variable global en un suceso, otro suceso la puede reinicializar sin que el primero se llegue a dar cuenta de ello.

Para declarar una variable global se pulsa Declre | Global variables y luego se detalla la misma.

La forma de declarar variables de tipo local en un determinado evento es el siguiente:

Tipo_de_dato nombre_variable{ [número de elementos] }

Cuando se abre la ventana de script sea de una ventana o de un objeto de ventana, aparte del área de trabajo, existen el la parte superior de la misma cinco cajas de pegado de listas, con las cuales se pueden pegar rápidamente variables y objetos de uso frecuente al codificar los scripts

Paste instance: esta caja despliega todas las declaraciones de variable de réplica. Con una doble pulsación sobre una variable de réplica se puede pegar en el script

  • Paste global: esta caja permite pegar en el texto cualquier variable de ámbito global Paste object: esta caja permite pegar objetos que estén relacionados con el script que se está escribiendo; por ejemplo botones de comando, list boxes, etc.
  • Paste Argument : Select event : da la opción de seleccionar un evento del ojbeto al que se le desea agregar código. Cuando un evento de un objeto espedcfico posee código, aparece una marca sobre la esquina izquierda del evento

Comentarios:

En PB existen dos formas de agregar comentrios a una aplicación.

  • // para un comentrio de una línea
  • / lineas de comentarios / para comentarios de más de una línea

Dentro del Script Painter, existen tres objetos que son muy funcionales a la hara de agregarcódigo a la aplicación; los describimos acontinunación:

  • Paste function: permite agregar (cada vez) uno de los tres tipos de funciones que PB soporta.
    • Built−in : cualquiera de las funciones que tiene interconstruidas PB
    • User−defined: alguna función definida por el progrmador External: alguna función externa a Power Builder y que se ha extraido hasta aquí por medio de una librería asosiada a la aplicación
  • Paste SQL: para declarar por medio de un ayudante alguna consulta sobre un modelo de datos Paste statement: para pegar en el script cualquier sentencia ya predefinida de PB, como un cilco una sentencia If then o if then else, etc.

Como se puede notar con estas herramientas practicamente podemos generar código PB sin conocer la estructura de su sintaxis!!!.

Algunos íconos útiles para este momento:

  • Select all: seleciona todo el texto que se encuetre en el script Comment: pone como comentario todo lo que se encuentre seleccionado. Si no hay texto sellecionado pone como comentario el código de la línea en la que se encuentre el cursor
  • UnComment: quita la selección hecha anteriormente.
  • Find: para buscar algún texto.
  • Find next: busca la siguiente ocurrencia
  • Replace: reemplaza algún texto seleccionado por otro que se proporcione
  • Compile: compila la vnetana actual
  • Select object: selecciona un objeto en particular
  • Browse Object: determina las características de un objeto que se encentre seleccionado
  • Return: vuelve al formulario.

Creación de Funciones Definidas por el Programador

Power Builder ofrece al progamador la posibilidad de crear funciones definidas por el mismo. Para agregar una función definida por el usuario se escoje el menú DECLRE y ahí se escoje Windows functions lo que dará como resltado un cuadro de diálogo cuyo propósito es pegar una función definida por el usuario en el script del control que esté activo o bien agregar una nuevo función a nuestra aplicación; eventulamente se pueden elininar funciones ya previamente definidas.

Una ves que se haya escogido NEW de las opciones que preseta el cuadro de diálogo se debe dar la definición de la función tomando en cuenta lo siguiente:

  • Definir el nombre de la función
  • Definir el tipo de acceso que se tendrá; en donde
  • Public: será a nivel de aplicación
  • Private: será a nivel de objeto que contenga la fúnción
  • Protected:será que solo el objeto que contenga la función y sus decendientes
  • Definir el tipo de datos que la función devolverá
  • La lista de posibles argumentos de la función se definen como sigue:
  • Name: el nombre del argumento
  • Type: el tipo de dato del argumento
  • Pass by: la forma en que el parámetro será pasado a la función; donde:
  • Value: indica que será pasada una copia del valor del argumento
  • Reference: envía un indicador del valor real del argumento pudiendo este ser cambiado por la función ReadOnly: envía un indicador del valor real del argumento pero con la restricción de que este no podrá ser modificado por la función. Aquí el argumento es tratado como una constante y no se tiene que gastar recursos en una nueva copia de la variable como es el caso del argumento por valor

Por otra parte desde el ícono FUNCTION también se pueden definir funciones (de tipo global); se hace de la misma forma que se hace desde el menú Declare. Un aspecto que es de notar en este punto es que todo objeto que aquí se envoque debe ser declarado (controles de ventana incluidos). En este mismo sentido si dentro de la funcion se usan algún control de ventana este se debe declarar como parámetro−. Las funciones declaradas

NOTA: si recien se ha cerrado el DSN, todavía no aparece ningún perfil en el DB Profile , puesto que ovbiamente no se he definido ninguno; pero en el Configure Data Base ya aparece en el DSN que se definió. También se puede destacar que si se borra en perfil el DSN aún permanece

Una vez que se ha determinado que existe el DSN al que se le quiere hacer el perfil se debe abrir el db Profile.

Los pasos para crear un perfil son los siguientes:

  • Determinar el driver nativo o Odbc según se quiere hacer el perfil
  • Escoger New

Uno de los parámetros más importantes para desarrollar perfiles, es el Catálogo de tablas de PB.

El catálogo de tablas, permite definir propiedad extendidas que entre otra cosa son para:

Combos : (el no aparezca en un combo Bach −que es lo que está almacenado en la db− sino que aparezca Bachiller por ejemplo)

  • Máscaras:
  • Validaciones :

El catálogo se crea bajo un Usuario común, por lo que se dispone para varios analistas. El catálogo está compuesto por 5 tablas que se definen bajo el usuario que trabaja sobre el catálogo, puediendo compartirse como ya se dijo.

  • En la lengüeta CONNECTION, completar la siguiente información:
  • Profile name: el nombre escogido para el perfil
  • Data Source: que corresponde al DSN que le estáhaciendo el perfil
  • Deahabilitar el usuario y password

En la lengüeta SYSTEM, definir la siguiente información: (es aquí donde se crea el catálogo de cuentas)

PB catalog table owner: el usuario −con derechos sobre la base de datos−, que será propietario del catálogo.

  • Table Criteria: es código sql, que se pone sobre el catálogo que se va a definir.

La ficha PREVIEW del cuadro Database Profile Setup muestra la sintaxis database Conection para establecer las propiedades de un objeto de transacción. Se puede usar este sintaxis en el script (por ejemplo en el script del suceso Open de la aplicación).

La primera vez que se conecta a la base de datos y se tiene acceso a crear datos, se crean las 5 tablas del catálogo

Cabe recordar que el dueño de las tablas que se crean en el catálogo es el Dueño del Catálogo definido desde del db Profile y por Default quedan en el DbSpace de System. −esto en el caso de Sybase−

Por otra parte al borrar el perfil de la base de datos no se borran las tablas de que han creado.

Si por algún motivo se pierden las tablas que conforman el catálogo, se pierden todas las referencias a las propiedades extendidas que se tengan sobre un modelo en particular; por lo que hay por tanto que estar respaldándolas como cualquier otra tabla importante del modelo. El catálogo solo se crea una vez.

ARCHIVOS INI

Es uno de los medios para conectarse a bases de datos a través de código. Presentan la característica de que si se encuentran en el cliente se debe tener una logística para distribuirlos a los demás clientes.

Además se debe tener mucho cuidado del lugar donde quedan los .ini puesto que como son archivos ascii, cualquier persona podría meter mano con dolo.

El enfoque que se presenta como alternativo es tener un servidor que sirva como nexo entre los clientes y el servidor de base de datos; ambos enfoques se presentan en la siguiente figura; mostrando de diferente color el servidor que serviría de enlace.

Los archivos ini, como es conocido, trabajan por secciones; mismas que empiezan por un corchete y dentro de cada sección se determinan las variables necesarias junto con sus valores.

Un caso típico de archivo .ini puede ser el siguiente

[DATABASE]

DBMS = ODBC

DBPARM = ConnectString='dsn=Proyecto'

USERID =

DBPASS =

LOGID =

LOGPASS =

SERVERNAME =

;mismo que podría servir de enlace para conectar una aplcación PB con un sistema de gestión de bases de datos.

Donde:

  • DBMS: es ODBC o el driver nativo del sistema gestor que se valla a usar DBPARM: puede contener toda la información concernniente a la conexión usando el parámetro ConnectString; es decir el DSN, Usuario y Password.
  • USERID: repersenta el usuario
  • DBPASS: representael password
  • LOGID:
  • LOGPASS:
  • SERVERNAME: representa el nombre de servidor en cuestión.

Configuración del SQLCA

Se hace mediante una window, en un botón que tenga el código necesario para la conección.

El código que podría presentarse en esta venatana se presenta a conticuación:

End if

// se leen los parametros del labs.ini

// P rofileString permite recuperar parámetros de un .ini

// SetP rofileString permite modificar parámetros de un .ini

// Lo que retorna el ProfileString, es una cadena. La cadena contenida en la variable de la sección a la cual se le hace referencia.

SQLCA.DBPARM = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","dbparm","")

// El comando anterior empieza a descargar el .ini:

// La instrucción anterior le dice que habra el archivo .ini en la sección //database y la variable dbparm.

//Lo que hace la instrucción anterior es

//tomar el dbparm del del .ini y se lo pone al dbparm de SQLCA

// La instrucción siguiente lo que hace es tomar todo lo contenido en la variable //DbParm de SQLCA ( `ConnectString='dsn=Dsn_ejemplo' ) y quitarle la //ultima comilla, después le agrega el contenido de los textboxes (usuario y //password) y finalmente le asigna de nuevo la comilla que le quitó.

SQLCA.DBPARM = LEFT(SQLCA.DBPARM, LEN(SQLCA.DBPARM)−1)+";"+ &

"UID="+trim(sle_usuario.text)+";" + &

"PWD="+trim(sle_clave.text)+";'"

// El resultado almacenado en SqlCa.Dbparm sería: ConnectString = `Dsn= proyecto; Uid= Nombre_Usuario; Pwd= Palabra_paso;'

// El resto del código del SqlCa solo garantiza que el .ini es igual que el código //del programa pera ya no es necesario; exepto el SqlCa.Dbms

SQLCA.DBMS = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","dbms","")

SQLCA.DATABASE = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","database","")

SQLCA.USERID = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","userid","")

SQLCA.DBPASS = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","dbpass","")

SQLCA.LOGID = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","logid","")

SQLCA.LOGPASS = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","logpass","")

SQLCA.SERVERNAME = Profilestring("c:\mis documentos\power builder\clase 03\labs.ini","database","servername","")

//Esta línea de código garantiza que se haya escogido sea el driver nativo o la //conexión ODBC que corresponda.

If trim(SQLCA.DBMS) = "" THEN

MessageBox("Error","No Existe Archivo DBMS",Exclamation!)

Halt Close

End If

Setpointer(Hourglass!)

//C onect es un comando de sql incrustado, después de esta sentencia PB le da el //control de la aplicación para la conexión con la base de datos al sistema gestor //que se haya escogido.

// en PB todo el sql que se introduzca debe decir ... using SqlCa o la variable de //trasacción que se tenga definida para tal efecto.

connect Using SQLCA; //no esta en PB pbScrit es un Sql Incrustado. ;

//obligado internamente open odbc para que abra el //drivers

Setpointer(Arrow!)

//La función SqlCode de SqlCA determina como se produjo la conexión con la //base de datos.

//Los valores que retona son:

// 0 cuando la conexión tubo éxito

// − 1 cuando existe algún problema en la base de datos

// 100 cuando una consulta debió retornar un registro pero retornó //más de uno.

IF SQLCA.SQLCODE <> 0 THEN

beep(1)

messageBox("Error","−No hizo acceso a base datos !",Exclamation!)

sle_usuario.Text = ''

sle_usuario.SetFocus()

return

Else

MiTransaction.DBMS = 'ODBC' ... una vez creada hay que definir las varialbes de transacción de igual forma que como se hace con la SQLCA

Eliminación de la transaction

Una vez que la transaction ha cumplido con su objetivo, se debe destruir la variable de transacción para liberar recursos del sistema.

La eliminación de la variable de transacción se hace mediante el comando DESTROY.

Ejemplo: DESTROY MiTransaction

Orden Lógico:

Para trabajar con una variable de transacción que no sea la SQLCA, se debe seguir un orden específico a fin de no ocacionar problemas al usuario en tiempo de ejecución:

Pasos:

  • Definir la variable de transacción
  • Conectarse al sistema de gestión
  • Ejecutar el codigo necesario
  • Desconectarse del sistema de gestión
  • Destruir el transaction que se haya definido

Manejo de menúes

Agregar un menú

La forma más prácita de hacer lo es mediente el pintor de menú de la PowerBar. Aquí dentro de las opciones más destacadas que presenta son:

  • Agergar un nuevo menú
  • Escoger una menú ya existente en la librería actual (to modified it)
  • Heredar un menú de la librería actual Escoger una librería diferente para agregar un menú que ya exista, mismo que se puede salvar como una menú de la librería actual para luego heredarlo, modificarlo, etc.

Trabajando con un nuevo menú

Insertar las barras principales : cada barra principal que se inserte en el nuevo menú, será capaz de contener como es lógico, elementos dentro de ella. Pero en primer lugar hay que darle un nombre a cada una de ellas (ejemplo archivo, Edición, ect). Esto se hace en el Menú Bar Items. El ícono insert de la barra de menú, es quien nos ayuda en esta labor. Por otra parte el ícono move es quien nos permite desplazarnos entre las diferentes barras una vez éstas ya definidas. Opcionalmente se pueden borrar barras ya perviamente definidas mediente el empleo del ícono delete que se encuentra en la misma barra de herramientas. Se pueden agregar otra barra también clicando a la par de la última barra que se tiene..

Elementos de cada barra : el siguiente paso es insertar las opciones de cada barra principal previamente definida; para esto nos valemos del Menu for en el que una vez que se alla escogido la barra correspondiente; el nombre de la misma se añadirá al caption de Menu for (por ejemplo dirá algo así como Menu For Archivo ). La barra se puede escoger clicando sobre el título de la misma o

mediante el scroll que aparece en la parte posterios a éstas.

Ahora bien, una barra principal puede estar compuesta por un número indefinido de opciones dentro de ella; por lo que lo que hay que hacer para agregar cada nueva opción es dar sobre el textbox de la opción actual una vez ésta definida. Se pueden agregar dentro de cada barra tantas opciones como sea necesario. Una forma de desplazarse por las opciones de cada barra es con las direccionales o el uso del mouse, etc.

Inserción de barras separadoras: para agregar una barra separadora dentro de un menú en particular solo se debe agregar un guión medio ( − ), en el lugar correspondiente al nombre de la opción del menú que se tenga escogido (en el nombre del Menu Object Text).

Agregar más niveles a una opción de menú determinada: es posible al igual que en otros lenguajes de programación definir dentro de una opción de menú determinada otras opciones más. El ejemplo típico de esto es la opción Imprimir de un menú Archivo que presenta dentro de ella algunas otras opciones tales como definir impresora, imprimir docuemento, etc. En Power Builder hacer esto requiere solo de usar el ícono Next Level que se encuentra en la barra de herramientas; una vez hecho esto el definir las opciones de ese subnemú se hace de la misma forma que se definieron en el nivel previo. Pueden existir tantos niveles como sea necesario. Se puede entonces desplazarse entre niveles con los íconos Next Level y Prior Level.

Definir teclas de acelerator y shortCut: es conveniente agregar a cada menú sus respectivas teclas de acelerator y shortCut apegandose a un estándar. Para definir acelerator, se antepone un Ampersan (&) a alguna letra de la opción a la que se le está agregando el acelerator. De esta forma el usuario podra desplegar la respectiva opción del menú mediante la combinación de ALT + la letra que se haya escogido como acelerator; los acelerators trabajan nivel a nivel; así que si por ejemplo se tiene una A como acelerator para archivo y una S para la opción Salir del menú archivo, si se quiera salir del formulario en cuestión mediente teclas de acelerator, se debe oprimir primero ALT + A y luego **ALT

  • S.** Por otra parte para agregar shortCuts, se debe escoger la combinación deseada de teclas en la lengüeta ShortCur (aquí hay que asegurarse que el shortCut se le está agregando a la opción de menú deseada). Un usario que desee por ejemlpo otener ayuda en linea que típicamente se encuentra en el menú ayuda y en la sección Help context de éste la puede accesar solo opriendo la tecla F1.

Barra de herramientas: es la cuarta lenguega de las propiedades del men y trabaja en conjunto con la lengüeta Pictures, en la toolbar se define el texto que puede o no aparecer sobre el ícono que se define en la lenguega Pictures.

Cabe apuntar que el lengüeta General(si la ventana es MDI, se puede definir un MDIMicroHelp el texto que aparece sobre el atatus bar)

Cógido a las opciones del menú: un menú solo es funcional una vez que este posee el código necesario para volver operativas todas sus definiciones. La forma de agregar código a una opción determinada del menú es clicando sobre el ícono Script una vez que se haya escogido la opción a la que se le desea agregar código. Una vez dentro de la ventana de código se debe escoger el evento que activará dicho código pues Power Builder posee más de un evento que puede hacer posible la ejecución de un código en particular; este evento por lo general siempre ha sido el Clicked pero aquí existe la posibilidad de invocar otro evento que desencadene dicho códogo.

Un factor que es muy importante hacer notar es que el código de los menúes se debe hacer tan general como se pueda, pues un menú en particular puede ser heredado a otro formulario, aplicación o inclusive librerías; por lo que lo ideal sería por ejemplo tener en la aplicación dentro de la que se piensa ejecutar el menú un evento definido por el usuario que realice todo el trabajo de código y dentro del código del menú solo se debería llamar dicho evento. Por ejemplo tener definido un evento que realice todo el trabajo de impresión para un caso en particular y despues dentro del codigo de la opción Imprimir del menú solo llamar ese evento (definido bajo un nombre tambien estandar), de esta manera podremos usar un menú en particular en