Power Builder
Power Builder
Power Builder
Introduccin
El uso de esta herramienta de desarrollo de software est destinada hacia el lenguaje de manipulacin (DML) en cerca de un 80%. Por lo que su interaccin con motores de bases de datos es muy extensa; principalmente a travs del objeto Data Windows que posteriormente se discutir ampliamente. Un detalle importante en relacin a los S I es que, siempre que se pueda las reglas del negocio deben estar presentes en la definicin de los modelos de datos, para de esta manera hacer ms giles las modificaciones que a futuro se le tengan que hacer a los S I de la organizacin. Ahora bien, con relacin a los motores de bases de datos, es importante destacar que un motor puede ser accesado desde una herramienta de diseo 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 sern 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 Driver ODBC Toda aplicacin en Powel Builder est respaldada en al menos una o ms libreras (.pbl). por lo que se podra afirmar que una aplicacin es en realidad un conjunto de una o ms libreras. SQL DDL DML DCL
Window: Es el famoso formulario, que premie entre otras cosas comenzar una aplicacin. 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 2) Visuales. Adems dentro de cada categora se pueden escoger si son del tipo estndar ya tienen la clase definida- o personalizados aqu el programador se encarga de su definicin por completo Men: Se usan principalmente para enlazar ventanas, y mantener la seguridad dentro de la aplicacin. Es decisin del desarrollador en qu momentos desea crear el men de la aplicacin lo cual lo puede hacer en el inicio o bien al final del desarrollo de la aplicacin. Structure: Objeto que permite definir variables de tipos de datos (el famoso Record de otras herramientas). Existen dos tipo de estructuras: 1. Generales: Se definen desde el cono de la barra de men - sin tener ningn formulario abierto- , estrn disponibles para toda la aplicacin; por ejemplo si crearamos una estructura en este punto estara disponible para toda la aplicacin 2. 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 aplicacin que se tiene en uso.
Ojo con el manejo de este objeto, pues sin un conocimiento serio de la herramienta se podran daar las libreras de Windows.
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. Query: Permite construir consultas sobre uno o varios esquemas de la base de datos. La consulta luego de salvada es almacenada como un objeto ms de la aplicacin; por lo que hay que asignarlo a una librera, ect. *No tocar sin acceso a una base de datos. Pipeline: Permite hacer migraciones de datos. El importar tanto como exportar se puede hacer desde aqu.
SQL AnyWhere Server Oracle
La migracin la hace tabla por tabla. Si la tabla existe actualiza los registros. Se debe tener mucho cuidado con la integridad; es preferible durante la migracin quitar la integridad de las tablas involucradas si no se tiene un conocimiento profundo de lo que se est haciendo. ODBC: Permite ver conexiones odbc ya hechas, o bien crearlas editarlas o incluso eliminar conexiones ya definidas DB Profile: Cuando una base de datos ya tiene la conexin ODBC, o si en su defecto se tiene el driver nativo, se le puede ya entonces gererar perfiles (= Profile) sobre la misma) Adems se pueden generar o modificar conexiones OBDC, desde aqu pero esto no es recomendado2 Es desde aqu que se puede por medio no de cdigo conectar a un modelo de datos. Se tienen divididos los diferentes drivers nativos incluidos en Power Builder, y adems las conexiones ODBC generadas por medio del generador de conexiones odbc (de la herramienta o el proporcionado por el sistema operativo) Table: Wizard para la generacin o alteracin de tablas. No tocar si no se tiene acceso a ningn modelo de datos.
Ver ms adelante en este mismo resumen la explicacin de por qu, no se recomienda generar conexiones ODBC desde el DBPROFILE o desde el CONFIGRE ODBC
Data Base Se conecta a la lltima base de datos que se us Con una aplicacin abierta en el conect del men file tambien aparecen los esquemas de de datos que se puede accesar (=abrir) Es mejor escoger la conexin desde el DB Profile. Browser: Forma rdida de ver los objetos de la aplicacin actual. Es un formulario con diferentes leguetas que presenta todos los objetos definidos y creados en la aplicacin actual. Library: Muestra las diferentes libreras de la aplicacin. Este objeto permite entre otras cosas exportar libreras de diferentes versiones, regenerar libreras, y ver y modificar ciertas propiedades de diferentes objetos. Dentro de una misma librera se pueden tener varias aplicaciones. Edtit: Para libreras OLE: Permite agregar objetos del tipo OLE Run3: Permite correr toda la aplicacin.
Debug Permite depurar la aplicin Run Window: Permite correr solo la ventana abierta. Si se tienes que hacer acceso a datos de algn modelo esta opcin no estar disponible.
Requiere tener el evento open de la aplicacin con algn cdigo valido. E.i: Open(nombre_ventana) para agregar cdigo a una aplicacin se puede escoger el cono script es la barra de men, entre varias otras opciones que hay para acceder al script de la aplicacin.
4 5
El nombre de la aplicacin no puede contener blancos Hay an otra forma de tener acceso a las propiedades de la aplicacin y es clicando en el men Entry y luego en properties.
Variable Types: cada una de las variables aqu definidas cumle con una funcin especfica y algunas trabajas tambien en conjunto: SQLCA: (rea de comunicacin con SQL), Esta variables tienes todos los parmetros necesarios para conectarse con cualquier motor de base de datos. Si solo se va a conectar con una base de datos en la aplicacin no se hace necesario dedinir ms variables Transaction. E.g: connect using SQLCA ODBC o no Usuario Son variables de SQLCA Password Base de datos Nombre de base de datos
SQLDA: (dinamic area) SQLSA: (static area) donde queda la instruccin SQL Las dos variables definidas anteriormente trabajan juntas para obtener consultas dinmicas, osea en las que el usuario define que campos quiere extraer y de que tablas
Error: para pasar mensaje de error del motor de la base de datos a Power Builder. Se pueden capturar los errores ms comunes en una tabla ms del modelo de datos, para determinar las acciones a seguir cuando el usuario cometa tal error. Por ejemplo se le podra informar al usuario que esta introduciendo un nmero de factura que ya existe (sera poco ilustrativo para el usuario si se le dice que est intentando duplicar un refistro de PK!!) En los dems errores solo se le avisa al usuario para que contacte con el departamento de sistemas de la organizacin.
Flujo normal
Aplicacin
Cd. de error
El error se captura en la variable DbError. Message: en la progrmacin orientada a objetos se pueden enviar mensajes entre objetos (parmetros, etc). Esta es la forma de hacerla de PB. Esta variable se usa junto a una funcin llamada Power Object. (se menda a traves del Power Object un mensage de una ventana a otra por ejemlo.) Libraries: Presenta el conjunto de libreras que tiene asociada la aplicaicin sobre la que se est trabajando.
Resto de las propiedades: Se refieren a la forma de presentar los diferentes textos y etiquetas y dems mensajes en tiempo tanto de diseo como de ejecucin. Algunas de estas propiedades se pueden cambiar en tiempo de ejecucin tambin. La gran mayoras de los objeto en la programcin orientada a objetos posee tre caractersticas: Propiedades: las caractersticas propias de cada objeto, muchas veces manipulables en run time. Mtodos: Forma en que va a operar el objeto Son procedimientos asociados a los controles; es decir rutinas ya establecidas que podemos invocar desde nuestras aplicaciones para que se realice alguna operacin sobre el control En PB hay dos tipos de mtodos, los generados por el usuario y los que genera PB. La diferencia entre ambos es que a los primeros hay que invocarlos mientras que los segundos no. Eventos: son el conjunto de instrucciones que se disparan al ejercer una accin sobre el objeto. Un evento es el conjunto de acciones que pueden ser motivadas por el propio usuario o por el mismo sistema operativo Cada objeto dispone de un conjunto especfico de eventos, de los cuales el analista/programador solo tiene que encargarse de escribir el cdigo necesario para hacer el evento funcional para los requerimientos de la aplicacin, es el sistema operativo es quien se encarga de determinar cuando se produce tal o cual evento.
Otra forma de agregar una ventana (ya existente a la aplicacin es clicando sobre el icono Library. Esto permite ir y escoger alguna ventana - no solo de la aplicacin activa - y agregarla a la aplicacin activa) 7 Se usar indistintamente en el resto de este resumen el trmino formulario del de ventana 8 Es muy importante tener en cuenta los prefijos que maneja PB, porque muchos objetos no funcionan si en el nombre no se les proporciona el prefijo adecuado. Para ver la liste de prefijos clicar en el men Design y luego sobre Options. La lista de prefijos se encuentra en las lengetas Prefixes1 y Prefixes2.
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 lengeta llamada Position. Se podra tener un tamao definido de ventana (como un machote- con coordenadas y tamao, adems 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 ubicacin 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 tambin dispone de una serie de eventos a los que se les puede dar un cdigo (=script) funcional. La forma de agregar cdigo 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.
Prefijo
Cb_ Pb_ Cbx_ Rb_ St_ P_ Gb_ Ln_ Oval_ R_ Rr_ Sle_ Em_ Mle Rte_ Hsb_ Vsb_ Ddlb_ Ddplb_ Lb_ Lv_ Tv_ Tab_ Dw_ Gr_ Ole_ Uo_ W_
El resto de prefijos se pueden encontrar en el apndice A (convenciones sobre los nombres) del libro Power Builder 6
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 rpidamente variables y objetos de uso frecuente al codificar los scripts Paste instance: esta caja despliega todas las declaraciones de variable de rplica. Con una doble pulsacin sobre una variable de rplica 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 estn relacionados con el script que se est escribiendo; por ejemplo botones de comando, list boxes, etc. Paste Argument: Select event: da la opcin de seleccionar un evento del ojbeto al que se le desea agregar cdigo. Cuando un evento de un objeto espedcfico posee cdigo, aparece una marca sobre la esquina izquierda del evento Comentarios: En PB existen dos formas de agregar comentrios a una aplicacin. // para un comentrio de una lnea /* lineas de comentarios */ para comentarios de ms de una lnea Dentro del Script Painter, existen tres objetos que son muy funcionales a la hara de agregarcdigo a la aplicacin; los describimos acontinunacin: 1. 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 funcin definida por el progrmador External: alguna funcin externa a Power Builder y que se ha extraido hasta aqu por medio de una librera asosiada a la aplicacin 2. Paste SQL: para declarar por medio de un ayudante alguna consulta sobre un modelo de datos 3. 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 cdigo 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 cdigo de la lnea en la que se encuentre el cursor UnComment: quita la seleccin hecha anteriormente. Find: para buscar algn texto. Find next: busca la siguiente ocurrencia Replace: reemplaza algn texto seleccionado por otro que se proporcione
Compile: compila la vnetana actual Select object: selecciona un objeto en particular Browse Object: determina las caractersticas de un objeto que se encentre seleccionado Return: vuelve al formulario10.
10
PB no permite abandonar una ventana de cdigo que posea errores de compilacin, entonces si se tiene que salir de una ventana que tenga errores de cdigo se debe marcar todo el cdigo del evento como comentario y salvar la ventana. Luego se podr volver al evento en cuestin y depurarlo
Ahora bien una vez definidas, las funciones se pueden invocar (si estn bien definidas claro!) para que cumplan su objetivo. Para invocar una funcin desde un evento de un control de ventana, se debe poner el nobre de la funcin seguido de los argumentos (caso que los tuviera)
CONFIGURACIN DE ODBC
Power Builder ofrece la posibilidad de crear la configuracin para conexiones ODBC (cono Configure ODBC del la barra de men), pero desde aqu no es posible determinar la versin del driver del motor de la base de datos con el que se est haciendo la conexin, por tanto no se puede estar seguro si la misma proporcionar los resultados esperados, pues si el motor de la base de datos es de una versin ms reciente que el driver que se posee para la conexin ODBC no dar un resultado adecuado. Ante esta perpectiva lo adecuado es hacer la conexin desde un producto (de cualquier marca, incluso el que est proporcionado por el sistema operativo -caso que est usando windows 9x o windows nt en la parte del Panel de control Control Panel-) para conexiones ODBC. Desde un producto para conexiones ODBC, se puede en la gran mayora de los casos escoger la versin del driver que corresponda con la versin 11 del sistema gestor que se est usando.
Server
En ambientes cliente servidor, se requiere instalar en el cliente una versin mnima del DBMS, que en el caso de Oracle es Oracle/client CLIENTE
Ahora bien ya en el producto ODBC, lo que se tiene que definir es el DSN (Data Souse Name), para lo que se siguen los siguientes pasos: Buscar el diver que corresponda a la versin del DBMS que se est usando. Inicialmente, lo que presentan los productos ODBC, es la lengeta con los DSN que ya han sido previamente definidos, por lo que si se quiere agregar una nuevo se debe escoger Agregar... (Add...), que est en la misma lengeta. Luego escoger la opcin de Finalizar; con lo cual se presenta un cuador de dilogo que proporciona la oportunidad de configurar el DSN, segn el driver que es haya escogido. Independientemente del driver que se escoja, se debe completar el compo del Data Source Name, que es el que se refiere a la base de datos que se le esta haciendo la conexin ODBC. Adicionalmente se pueden completar el usuario y password, pero esto en un ambiente cliente servidor carecera de sentido Una vez que se haya completado el Data Source Name, se esgoje la opcin de Terminar para que se cree el y User DSN.
11
Si la versin del driver es mayor a la versin del sistema gestor que se use no tiene perjuicio, lo que importa es que la versin del driver contenida en el producto ODBC no sea menor a la del DBMS
La primera vez que se conecta a la base de datos y se tiene acceso a crear datos, se crean las 5 tablas del catlogo Cabe recordar que el dueo de las tablas que se crean en el catlogo es el Dueo del Catlogo definido desde del db Profile y por Default quedan en el DbSpace de System. esto en el caso de SybasePor otra parte al borrar el perfil de la base de datos no se borran las tablas de que han creado. Si por algn motivo se pierden las tablas que conforman el catlogo, 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 respaldndolas como cualquier otra tabla importante del modelo. El catlogo solo se crea una vez.
ARCHIVOS INI
Es uno de los medios para conectarse a bases de datos a travs de cdigo. Presentan la caracterstica de que si se encuentran en el cliente se debe tener una logstica para distribuirlos a los dems clientes. Adems se debe tener mucho cuidado del lugar donde quedan los .ini puesto que como son archivos ascii, cualquier persona podra 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 servira de enlace.
SERVER ODBC CLIENTE
SqlCa .Ini
.Ini
Los archivos ini, como es conocido, trabajan por secciones; mismas que empiezan por un corchete y dentro de cada seccin se determinan las variables necesarias junto con sus valores. Un caso tpico de archivo .ini puede ser el siguiente [DATABASE] DBMS = ODBC DBPARM = ConnectString='dsn=Proyecto' USERID = DBPASS = LOGID = LOGPASS = SERVERNAME = ;mismo que podra servir de enlace para conectar una aplcacin PB con un sistema de gestin 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 informacin concernniente a la conexin usando el parmetro ConnectString; es decir el DSN, Usuario y Password. USERID: repersenta el usuario DBPASS: representael password LOGID: LOGPASS: SERVERNAME: representa el nombre de servidor en cuestin.
if Trim(sle_usuario.Text) = '' then beep(1) messageBox("Error","Usuario Invalido !",Exclamation!) sle_usuario.Text = '' sle_usuario.SetFocus() Return End if if Trim(sle_clave.Text) = '' then beep(1) messageBox("Error","Clave Invalida !",Exclamation!) sle_clave.Text = '' sle_clave.SetFocus() Return End if //leer archivo labs.ini // FileOPen abre un archivo: StreamModel = leer hileras // Read = como solo lectura //retorna un nmero de archivo, si falla retorna -1 nfile1 = FileOpen("c:\mis documentos\power builder\clase 03\labs.ini",StreamMode!,Read!) if nfile1 = -1 then MessageBox("Error","No Existe Archivo *.INI",Exclamation!) Halt Close else FileClose(nfile1) End if //se leen los parametros del labs.ini // ProfileString permite recuperar parmetros de un .ini // SetProfileString permite modificar parmetros de un .ini // Lo que retorna el ProfileString, es una cadena. La cadena contenida en la variable de la seccin 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 instruccin anterior le dice que habra el archivo .ini en la seccin //database y la variable dbparm. //Lo que hace la instruccin anterior es //tomar el dbparm del del .ini y se lo pone al dbparm de SQLCA // La instruccin siguiente lo que hace es tomar todo lo contenido en la variable //DbParm de SQLCA (ConnectString='dsn=Dsn_ejemplo') y quitarle la //ultima comilla, despus 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 sera: ConnectString = Dsn= proyecto; Uid= Nombre_Usuario; Pwd= Palabra_paso; //El resto del cdigo del SqlCa solo garantiza que el .ini es igual que el cdigo //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 lnea de cdigo garantiza que se haya escogido sea el driver nativo o la //conexin ODBC que corresponda. If trim(SQLCA.DBMS) = "" THEN MessageBox("Error","No Existe Archivo DBMS",Exclamation!) Halt Close End If Setpointer(Hourglass!) //Conect es un comando de sql incrustado, despus de esta sentencia PB le da el //control de la aplicacin para la conexin 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 //trasaccin 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 funcin SqlCode de SqlCA determina como se produjo la conexin con la //base de datos. //Los valores que retona son: // 0 cuando la conexin tubo xito // - 1 cuando existe algn problema en la base de datos // 100 cuando una consulta debi retornar un registro pero retorn //ms 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 messageBox("OK","-Acceso Correcto Bienvenido !",Exclamation!) END IF w_entrada.hide() Open(w_cursores) // Fin de cdigo del evento cliked de la ventana entrada.
Variables de Transaccin
En la introduccin al inicio de este manual, y en la seccin anterior ya se ha abordado el tema de las variables de transaccin; al menos de la que Power builder trae como Default (SQLCA). La Structured Query Language Comunication Area rea de Comunicacin del Lenguaje Estructurado de Consultas-, es suficiente si nuestra aplicacin solo necesita comunicarse con una sola base de datos. En la tabla siguiente se pressentan las propiedades de los objetos de transaccin retornados por la base de datos. ATRIBUTO TIPO DE DATO DESCRIPCIN SqlCode Largo El xito o fallo del cdigo de la operacin SQL ms reciente: 0 = xito 100 = no retorna resultado (ms de un registro) - 1 = Error (se usa SQLDBCode para ver detalles) SqlNRows Largo El nmero de filas afectadas SQLDBCode Largo El codigo de error del vendedor de la base de datos SQLErrText Cadena El menasje de error del vendedor de la base de datos SQLReturnData Cadena El dato de retorno especfico de DBMS Como ya se he dicho si nuestra aplicacin solo necesita conectarse a una base de datos con el Transaction que por defoul trae Powr Builder es suciente (=SQLCA); pero en los casos en que sea necesario que nuestras aplicaciones interacten con ms de una base de datos. El caso tpico aqu es el ejemplo de los agentes de ventas; quienes portan su propia base de datos en su PC y al final del da pasan las transaccioes al servidor de la organizacin; aqu se debe (al final del da por ejemplo) estar conectado al mismo tiempo a la base de datos centralizada y la personal. Ya aqu estamos en necesidad de definir al menos una varialble de tranasccin ms aparte del SQLCA. Incluso podemos definir otro transaction diferente si no queremos usar el SQLCA, pero en realidad carece de sentido pues SQLCA trae ya implcito lo necesario para comunicarse con SQL. Definicin del transaction (mediante cdigo) Se define la variable de transaccin Transaction MiTransaction MiTransaction = CREATE transaction MiTransaction.DBMS = 'ODBC' ... una vez creada hay que definir las varialbes de transaccin de igual forma que como se hace con la SQLCA Eliminacin de la transaction Una vez que la transaction ha cumplido con su objetivo, se debe destruir la variable de transaccin para liberar recursos del sistema. La eliminacin de la variable de transaccin se hace mediante el comando DESTROY. Ejemplo: DESTROY MiTransaction Orden Lgico: Para trabajar con una variable de transaccin que no sea la SQLCA, se debe seguir un orden especfico a fin de no ocacionar problemas al usuario en tiempo de ejecucin:
Pasos: 1. Definir la variable de transaccin 2. Conectarse al sistema de gestin 3. Ejecutar el codigo necesario 4. Desconectarse del sistema de gestin 5. Destruir el transaction que se haya definido
Manejo de menes
Agregar un men La forma ms prcita de hacer lo es mediente el pintor de men de la PowerBar. Aqu dentro de las opciones ms destacadas que presenta son: Agergar un nuevo men Escoger una men ya existente en la librera actual (to modified it) Heredar un men de la librera actual Escoger una librera diferente para agregar un men que ya exista, mismo que se puede salvar como una men de la librera actual para luego heredarlo, modificarlo, etc. Trabajando con un nuevo men Insertar las barras principales12: cada barra principal que se inserte en el nuevo men, ser capaz de contener como es lgico, elementos dentro de ella. Pero en primer lugar hay que darle un nombre a cada una de ellas (ejemplo archivo, Edicin, 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 tambin 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 aadir al caption de Menu for (por ejemplo dir algo as como Menu For Archivo). La barra se puede escoger clicando sobre el ttulo 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 nmero indefinido de opciones dentro de ella; por lo que lo que hay que hacer para agregar cada nueva opcin es dar <enter> sobre el textbox de la opcin 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. Insercin de barras separadoras: para agregar una barra separadora dentro de un men en particular solo se debe agregar un guin medio ( - ), en el lugar correspondiente al nombre de la opcin del men que se tenga escogido (en el nombre del Menu Object Text). Agregar ms niveles a una opcin de men determinada: es posible al igual que en otros lenguajes de programacin definir dentro de una opcin de men determinada otras opciones ms. El ejemplo tpico de esto es la opcin Imprimir de un men Archivo que presenta dentro de ella algunas
12
Se puede mover un elemento de men de lugar usando la mano que aparece sobre la PowerBar
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 estndar. Para definir acelerator, se antepone un Ampersan (&) a alguna letra de la opcin a la que se le est agregando el acelerator. De esta forma el usuario podra desplegar la respectiva opcin del men mediante la combinacin 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 opcin Salir del men archivo, si se quiera salir del formulario en cuestin mediente teclas de acelerator, se debe oprimir primero ALT + A y luego ALT + S. Por otra parte para agregar shortCuts, se debe escoger la combinacin deseada de teclas en la lengeta ShortCur (aqu hay que asegurarse que el shortCut se le est agregando a la opcin de men deseada). Un usario que desee por ejemlpo otener ayuda en linea que tpicamente se encuentra en el men ayuda y en la seccin 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 lengeta 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 lengeta General(si la ventana es MDI, se puede definir un MDIMicroHelp el texto que aparece sobre el atatus bar) Cgido a las opciones del men: un men solo es funcional una vez que este posee el cdigo necesario para volver operativas todas sus definiciones. La forma de agregar cdigo a una opcin determinada del men es clicando sobre el cono Script una vez que se haya escogido la opcin a la que se le desea agregar cdigo. Una vez dentro de la ventana de cdigo se debe escoger el evento que activar dicho cdigo pues Power Builder posee ms de un evento que puede hacer posible la ejecucin de un cdigo en particular; este evento por lo general siempre ha sido el Clicked pero aqu existe la posibilidad de invocar otro evento que desencadene dicho cdogo. Un factor que es muy importante hacer notar es que el cdigo de los menes se debe hacer tan general como se pueda, pues un men en particular puede ser heredado a otro formulario, aplicacin o inclusive libreras; por lo que lo ideal sera por ejemplo tener en la aplicacin dentro de la que se piensa ejecutar el men un evento definido por el usuario que realice todo el trabajo de cdigo y dentro del cdigo del men solo se debera llamar dicho evento. Por ejemplo tener definido un evento que realice todo el trabajo de impresin para un caso en particular y despues dentro del codigo de la opcin Imprimir del men solo llamar ese evento (definido bajo un nombre tambien estandar), de esta manera podremos usar un men en particular en cualquier aplicacin mediante la herencia. Copiar un men Los pasos necesarios para copiar un men de otra aplicacin se pueden presentar tal com sigue Escoger el cono Menu de la barra de herramientas.
Esgoger la opcin Other del cuadro de dalogo que se presenta Escoger la librera adecuada segn el path donde se encuentre el menu Seleccionar el men deseado de la librera en mencin Mediante la opcin Save As del men archivo de Power Builder darle el nombre y uviccin adecuada dentro de la librera que se quiere pegar. En este punto ya existe un men independiente del que se tiene en la otra librera. Heredar un men: Para heredar un men Power Builder pregunta de cual librera se desea hacer la herencia y se salva. Para agregarlo a una ventana, sta tiene que ser Main o MDI. La principal diferencia entre un men heredado y otro copiado esque este ltimo no se le puede modifcar nada previo, se puede modificar los cambios hechos en l, pero no se puede modificar nada que no haya sido hecho sobre l.
Uso de treeviews
Windows usa este tipo de vistas para representar los directorios o subdirectorios de una unidad de disco en particular Pasos para el uso de treeviews definir las figuras que se van a usar en la pgina de propiedades del treeview. (desde luego un arbol que solo tenga texto no necesita usar figuras, pero es por esttica) codificar un PowerScript para aadir nudos al rbol, lo que probablemente se hace mejor con una funcin y as se codifica el powerScrip una solo vez. Ejemplo de uso de treeviews En el ejemlpo siguiente se emplean tres funciones para procesar un treeview. La primera, of_add_to_treview (ver listado siguiente) declara un treeviewitem, que es un nudo de un arbol; luego rellena ese item y lo aade al treeview usando la funcin (intrseca) InsertItemLast. La definicin del encabezado de la funcin que posteriormente se ver es como sigue: Name: of_add_to_treeview Access: public Return: long Argumets: 1. Atv_treeview treeview value 2. As_label string value 3. Aa_data any value 4. Al_handle long value CUERPO DE LA FUNCION: Treeviewitem ltvi_new long ll_newhandle ltvi_new.label = as_label ltvi_new.data = aa_data ll_newhandle = atv_treeview.insertitemlast(al_handle, ltvi_new)
if ll_newhandle < 1 then messagebox('Treeview Error', & 'InsertLastItem error on the oof_add_person ' + & 'function of w_Treeview') End if return ll_newhandle Si un gestor de otro nodo se enva al treeview, InserItemLast aade el nuevo nudo como una sud-divisin del nodo gestor. Si se enva 0 como gestor, InsertLastItem aade el nuevo nudo como un nudo raiz (sin matriz). En la ventana w_treeview (objeto dentro del cual se debe declarar la funcin anterior), la funcin de ventana of_buildtree (definida a continuacin), llama a of_add_to_ treeview para construir el arbol La definicin del encabezado de la funcin que posteriormente se ver es como sigue: Name: of_buildtree Access: public Return: any Argumets: 5. Tv_1 treeview value CUERPO DE LA FUCION long ll_company_handle long ll_office_handle ll_company_handle = & of_add_to_treeview (tv_1, "Make More Money, Inc.", 1, 0) ll_office_handle = & of_add_to_treeview (tv_1, "East Coast Division", & 2, ll_company_handle) of_add_to_treeview (tv_1, "Jack Horner", & 1, ll_office_handle) of_add_to_treeview (tv_1, "Mary Q. Contrary", & 2, ll_office_handle) ll_office_handle = & of_add_to_treeview (tv_1, "West Coast Division", & 3, ll_company_handle) of_add_to_treeview (tv_1, "L. boo Peep", & 1, ll_office_handle) of_add_to_treeview (tv_1, "I. John Henry", & 2, ll_office_handle) ll_office_handle = & of_add_to_treeview (tv_1, "Intl. Division", & 4, ll_company_handle) of_add_to_treeview (tv_1, "K. Cole", & 1, ll_office_handle) of_add_to_treeview (tv_1, "Ali Babba", & 2, ll_office_handle) of_add_to_treeview (tv_1, "Santa clause", &
3, ll_office_handle) tv_1.SetLevelPictures(1,2,1,0,0) tv_1.SetLevelPictures(2,3,1,0,0) tv_1.SetLevelPictures(3,4,4,0,0) return '' por otra parte evento que es usado para capturar cualquir cambio en el arbol es el SelectionChanged en el se puede decir undo ha cambiado en usuario el nudo actual seleccionado. El script que sirve de ejemplo se puede dictar as como sigue: TreeviewItem ltvi_olditem TreeviewItem ltvi_newitem string level_name[] = {"Company", "Sales oficce", "Employee"} string ls_message getitem (oldhandle, ltvi_olditem) getitem (newhandle, ltvi_newitem) if ltvi_olditem.level > 0 then //First time through messagebox("Treeview Change", & "Old Selection: " +& char(13) + level_name[ltvi_olditem.level] + & " Name:" + ltvi_olditem.label + & "~r" + level_name[ltvi_olditem.level] + & " ID: " + string(ltvi_olditem.data) +& "~r~rNewSelection: " + & "~r" + level_name[ltvi_newitem.level] + & " Name:" + ltvi_newitem.label + & "~r" + level_name[ltvi_olditem.level] + & " ID: " + string(ltvi_newitem.data)) end if en el anterior script los argumentos oldhandle y newhadle se han enviado al evento SelectionChanged. Con el cdigo precedente, cada vez que un treeview cambia los nudos, se aber un cuadro de mensage con un texto que indica los cambios.
Clusula Select
La clusula seclect dentro de Power Builder tiene dos formas generales de poder ser usada: 1. Aquella que retorna solo un registro (donde SQLca.SQLCode = 0)
2. Aquella donde se retorna ms de un registro (donde SQLca.SQLCode = 100), a este tipo de select se le considera con el uso de CURSORES Select para un registro para los casos en que se est seguro de que la consulta al modelo de datos no retornar ms de un registro, la sintaxis del script en el PowerScript de PowerBuilder para la consulta ser casi igual a un SQL estandar excepto que cada campo que se retorne se debe descargar en una variable del programa declarada previamente (no se permiten descargas a controles de ventana), dentro de la seccin INTO. A cada variable de descarga se le debe anteponer dos puntos (:). El script siguiente determinara el nombre salario y departamento de trabajo para la persona que ms gane dentro de un modelo de datos de dos tablas, a saber Empleado y Departamento. //se definen las variables que servirande descarga string name, dep long sal SELECT salario, nombre, desdep & INTO :sal, :name, :dep & FROM departamento D, empleado E & where D.coddep = E.coddep & and Salario = (select max(salario) & from empleado ) using SQLCa; // se usa el transaction por default //si se presentara algn error... If sqlca.sqlcode <> 0 then messagebox ("ERROR", "Se present un error al intentar recuperar + & el registro" ,StopSign!) Return //...se retorna end if //si se tiene xito, entonces se presentan los resultados en los label st_3.text = name st_5.text = string(sal) st_7.text = dep Select para ms de un registro (Cursores) en SQL embebido (= incrustado) se producir un error si se tratade recuperar ms de una fila; aun as habr ocaciones que se quiera recuperar muchas filas que cumplan ciertos criterios, para este caso se debe usar un cursor. Un cursor es una tabla temporal que SQL establece en todas las filas que cumplen ciertos criterios, as que se puede acceder a esas filas de una en una. Uso de cursores El mandato declare: antes de usar un cursor, primero hay declararlo con el mandato DECLARE Ejemplo: declare cursor_name La clasula select: una ves declarado lo que sigue es la clasula select que se apoye en el select incluida la sentencia que determina cul transaction se usa. Ejemplo: cursor for select_statement using transaction;
El mandato open: ahora lo que falta es solo abrir su posterior uso Ejemplo: open cursor_name; El mandato Fetch: despus de abierto el cursor hay que traer (= fetch) cada fila. Fetch es quien permite procesar cada fila, para ahora s por cada fila descargar los campos que haya recuperado la instruccin select. Al igual que el select para un solo registro se debe descargar cada campo en una variable de progama anteponindole a este dos puntos (:). Ejemplo: fetch cursor name Into host_variable_list; El mandato clase: el ltimo paso de uso de un cursor es cerrarlo. El cierre de un cursor libera la memoria usada por las tablas temporales y permite reabrir el cursor bajo nuevos criterios de seleccin Ejemplo: close cursor name;
EJEMPLO COMPLETO DE CURSOR: //se declara el cursor con su clasula select DECLARE dep CURSOR FOR SELECT coddep & FROM DEPARTAMENTO & ORDER BY 1 DESC & USING SQLCA; //en la variable de transaccin // //se declara la variable de descarga (= host variable variable anfitrina-) STRING DEPARTAMENTO //se abre el cursor OPEN dep; //se determina si el cursor se ha completado con xito (= 0), es hasta aqu que se evala //el resultado de la consulta (ojo el resultado no la consulta) IF SQLCA.SQLCode <> 0 THEN MessageBox("Estado","Error abriendo cursor "+SQLCA.SQLErrText) RETURN END IF //descarga el primer registro en departamento FETCH dep INTO :departamento; //seguir descargando mientras se retorne un registro (= mientras haya registros //por leer) DO WHILE SQLCA.SQLCode=0 //agrega el resultado almacenado en la variable anfitriona a un //DropDownListbox ddlb_1.AddItem(departamento) //Contina con el siguiente registro, si no existe SQLCA.SQLCode //retornar diferente de 0 y no se iterar de nuevo, evitando as el error. FETCH dep INTO :departamento; LOOP CLOSE dep;
DataWindows
Los data windows son como controles limitados a los datos, incoppran interfaces de usuario tales como editores de una lnea y campos de texto estticos. Pero a diferencia de stos los DataWindows son tratados como un solo objeto. En algunos casos un Datawindow permite toda la sintaxis SQL en otros casos no toda. El pintor de datos windows tiene realmente tres ventanas principales. La priemera (= el SQL Painter), es donde se define el dato fuente para el datawindows, as como su estilo de presentacin. La segunda ventana (=diseador de DataWindows),es donde se delinea su formato usando argumentos de informe; hay 4 argumentos en la mayora de los DataWindows, a saber, encabezamiento, detalle, pie y resumen. La ultima ventana es la de vista perliminar, donde se puede observar el DataWindows con los datos recuperados desde el modelo de datos. Para abrir el Pintor de DataWindows, se realizan los siguientes pasos: 1. Se pulsa el botn DataWindowsde la powerBar para abrir el cuador de dilogo Abrir DataWindows 2. Se puede crear un nuevo DataWindows o modificar uno ya existente 3. En el cuadrode dilogo New DataWindows se seleccciona el DataSource y presentation Style, tambien se puede fijar la DataWindows Option
SQL Painter:
Una vez que se ha escogido el tipode consulta que se pienza hacer y el estilo de presentacin es hora de selecccionar las tablas que se desea que sean parte del control DataWindows que se est creando. Despus de seleccionar las tablas de la consulta se deben escoger los campos de esas tablas que aparecern el el resultado del DataWindows. Se puede adems escoger aqu el criterio de seleccin de los campos.
Sort: permite hacer que la conslta aparezca en forma ordenada. Para ello, se escoge la columna por la que se quiere hacer el ordenamiento y se traslada hacia el campo que aparece a mano derecha de las mismas; una vez aqu se puede escoger si el ordenamiento se desea hacer ascendiente o descendentemente. Where: condicin cual se desea que cumpla la consulta, se pueden usar adems de los conocidos Like, between, is, etc operadores de tipo relacional. Varias condiciones pueden estar unidas mediante operadores lgicos. Es aqu donde podemos pasar parmetros trados del programa al DataWindow, los agregamos mediante el men: Design Retrieval Arguments...; de esta forma establecemos un vnculo entre el DataWindow y el programa de aplicacin. Los agregamos a la clausula where como se agregan variables anfitrionas, es decir, se les antepone :. Para eleminar argumentos se escoge de nuevo Design Retrieval Arguments... y se elinina el argumento. Se puede elininar una condicin completa, escogiendo el boton derecho del mouse y clicando en Clear. Group: para agrupamientos Having: condicin del agrupamiento. Compute: son columnas calculadas para la consulta que se est haciendo. Sintax: es el cdigo de la consulta segn hasta el momento. (Desde aqu no se puede modificar) Filtros Se definen mediante Rows Filter... Lo que hacen es ocultar las columnas que cumplan con la condicin del filtro, pero no las elimina del DataWindow, por tanto no reducen el trafico en la red. NOTA: una vez que se da por OK en esta parte se entra al diseo del DataWindows, Se puede modificar la presentacin de los datos (pero no modificar el estilo de presentacin, pues este solo se puede modificar con cdigo en RunTime), o incluso se puede mofificar el select que se haya esgogido, mediante el uso del cono SQL de la PowerBar.
13
se necesita mostrar o introducir datos que no estn almacenados en una base de datos relacional Stored procedure: son extremadamente populares para los DataWindows de solomostrar que pueden ser usados si el sistema de gestin de que contiene la base de datos los soporta. Algunas bases de datos tienen procedimientos almacenados altamente eficientes. Con frecuencia se puede mejorar la velocidad de la aplicaicin situando algunas de las sentencias SQL en estos procedimientos almacenados. Se pueden usar Procedimientos almacenados dentro de DataWindows si y stos lo que devuelven es una consulta Select.
Por defecto se crea un sum() para todas las columnas escogidas y la pone como summary sobre el Datawindows, pero lego de esto se puede situar en cualquier lugar, as como modificar la expresin que dar com resultado. Para modificar la expresin se debe escoger las propiedades del objeto informatizado y despus modifcar el texto Expresin por la expresin requerida. Pulsando el botn More en esa misma lengeta, se pueden escoger una gran cantidad de funciones preconstuidas para dar formato a la expresin, solo hay que tener cuidado pues el formato de esas funciones difiere un poco de lo usual. Por ejemplo si para validar un If lo hacemos usualmete as: If <cond> then; en ese tip de funciones el formato es If(cond, true, false); donde cond representa la condicin propiamente dicha con su consecente posible resultado, true especifica el resultado a mostrar si se cumple la condicin y false el resultado a mostrar si no se cumple.
DataWindows desplegables
Con frecuencia se necesitarn cajas de lista desplegables para contener valores desde las tablas del modelo de datos. Es mejor poner una lista desplegable con los cdigos de los clientes a obligar al usuario a memorizar cada uno de los cdigos de todos los usuarios. Para que Power Builder pueda recuperar la lista despleglable desde una tabla, las listas se construyen usando los DataWondows desplegables. En lugar de usar un tabla de difcil cdigo, el Drop-Down DataWindow (=DDDW) recupera su lista de valores de datos y los muestra por medio de un DataWindow; por lo que el DDDW es un DataWindow descendiente o lo que es lo mismo un DataWindow dentro de otro. Para aadir un DDDW el estilo de edicin de una columna lo primero que hay que hacer es crear el DataWindow usado para mostrar la lista de valores. Normalmente, los DataWindows se construyen con el estilo tabular. Primero se selecciona la columna de dato y muestra en la lista desplegable.
Una vez definida la consulta que servir como soporte al DataWindows anidado se cancelan todos los titulares de columna y todas las columnas que no se quieran mostrar. Supongamos que lo que desea mostrar el nombre de los empleado de una compaa X; si la clave primaria es el cdigo pues se eliminan todos los encabezados de columna adems del cdigo del empleado. Si lo que se desea es mostrar ms de un valor (=contenido del DDDW) y no se desea que el Datawindow que contiene el DDDW pierda esttica(=definir una caja de texto de 50 char, para mostrar solo el cdigo), lo que se debe hacer es ampliar el ancho del DDDW con relacin al Datawindow (=Width of DropDown), con esto se consegir que al clicar (=en tiempo de RunTime o Preview) sobre la columna que posea el DDDW sta se expanda de manera que muestra toda la informacin que se necesite. Aunque se elimine una columna en el diseador de DataWindow sta permanecer en el SQL Select y en el conjunto de resultados del DataWindow, pero no se ver nunca ms. El prefijo para este tipo de DataWindow es D_DDDW Una vez salvado el DataWindow, se vuelve al Item DataWindow, se selecciona una columna, se abren las propiedades de edicin y se elige DropDownDW como estilo en la lenguega Edit14. Hecho se debe editar el campo que contendra el DDDW. El estilo de este campo debe de ser DropDownListBox. Aqu se predeterminan las propiedades del campo, se elige el Datawindow que se quiere asociar con esa columna (=el DDDW), despues de eligir esto, se pulsa sobre la columna de datos que se mostratar al usuario y luego el valor que se pasar al programa internamente. El valor del dato se sita en el bffer de datawindow cuando un valor de muestra se selecciona en la lista. Luego de esto, se completa el resto de las propiedades del datawindow; stas son identicas a las de las cajas de lista (= ya que se dijo que un DDDW se un tipo de caja de lista). Lo nico que falta es pulsar OK. NOTA: Para ejecutar el DDDW hay que introducirle datos en la tabla a la que hace referencia Como ya se dijo, obviamente el campo en el que se desplegarn los valores resultantes de la consulta debe ser un DropDownListBox15. A los DataWindow desplegables se les llama tambin DataWindow descendientes (= Child DataWindow) Empleo del pintor DataBase para definir formatos de muestra, estilos de edicin y reglas de validacin El en depositario de Power Builder para la base de datos se pueden guardar formatos de muestra, estilos de edicin y reglas de validacin, aplicables dentro de las propiedades de las columnas en los DataWindows. Para ello una vez habiendo escogido el cono DataBase en la Powerbar (sin seleccionar tabla alguna), se escoje en el men Disign la opcin deseada , a saber: Edit style maintenance Display format maintenance Validation maintenance
14
Si lo que se desea es que este DataWindow se muestre siempre que se accesa esta columna lo que se debe hacer es crear una propiedad extendida sobre la columna con el pintor de base de datos. Ver Propiedades extendidas en este mismo documento. 15 Ver seccin Editar campos del DataWindow, en la pgina anterior.
Fijacin una propiedad extendida Se puede crear una propiedad extendida para luego agregarla a alguna columna de alguna tabla del modelo de datos o bien esgoger la columna y acto seguido crear la propiedad extendida sobre esa columna. Suponiendo que se ha previamente seleccionado una columna presionado el botn derecho del mouse y clicado sobre Properties, estos son lospasos que se deben seguir para crear una propiedad extendida: Abrir la lengeta Edit Style (si lo que se quiere es agregar una propiedad que ya existe solo se escoge y acabado el asunto) escoger New (para crear la propiedad) Deterninar el nombre para lapropiedad extendida (para poder agregarla luego a ms columnas) Escoger el estilo de presentacin que se desea para la propiedad. En este punto lo ms usual es escoger un DDDW para cargarle los valores de el obtenidos pero tambin se podra generar como un check o un boton de radio, etc. Vamos a partir del supuesto que se est generando sobre un DDDW Escoger el DDDW que servir de soporte a la columna Escoger el valor que mostrar al usuario Escoger el valor que internamente se pasar al sistema de gestin Las dems propiedades son similares a otras ya antes descritas; en este caso a las de un DDLB. Si dentro de un DataWindow no se desea usar una propiedad definida a una columna, se escoge la columna (del DataWindow) y se va a las propiedades de la misma, ah se define el estilo de presentacin bajo el cual quiere mostrarse la columna. Eliminacin de una propiedad extendida Para ello se escoge el men Design Edit Style Maintenance ah se deternina cual propiedad quiere ser eliminada o bien mofificada. NOTA: cuando se aade una definicin por defecto a la base de datos se aplicar solamente a los DataWindows que se creen en los sucesivo y no a los que ya estn creados. Para los ya existentes, se puede usar la utilidad DataWindow Extended
Attributes Synchronizer (DWEAS), para sincronizar las propiedades de la columna del DataWindow con las de la columna de la base de datos. Definicin de valores por defecto usando las especificaciones de columna en Row: (sobre el DataWindow) seleccionando Rows| Column specifications..., es posible tambin fijas valores por defecto para las columnas en el dataWindows. Aqu es posible fijar el valor inicial, la expresin de validacin, un mensaje para validar y la columna de la base de datos relativa a la columna del Datawindow. Este cuador de dilogo es uno de los mejores medios para manipular los valores por defecto.
Resumen de DataWindows
Paso 1 Paso 2 Paso 3 Origen Estilo Instruccin SQL Diseo del dataWindows
1. Iniciar
Causa que un control Datawindow o almacen de datos use un objeto de transaccin que el programador el indique. El objeto transaccin provee la informacin necesaria para comunicarse con la base de datos. La sintaxis que se usa para iniciar es por lo general: nomre_dw.SetTansobject(nombre_transaccin); lo cual se indica en el evento open de la ventana donde est el control DataWindow; y lo que causa es como se dijo que se active el objeto transaccin con relacin al control DataWindow.
La funcin Print() de DataWindow imprime el contenido del bfer principal de DataWindow tal como se haya formateado en el pintor de DataWindow. Acontinuacin se muestra el cdigo para un evento que bien puede llamarse ue_Print This . accepText() This . print() This . setfocus()
Driver Nativo
Power Builder no solo puede comunicarse son sistemas gestores por medio de conexiones ODBC; sino que posee una serie de drivers nativos de diferentes sistemas gestores, a saber Informix, SQL Server, Oracle, Sybase, para hacer ms eficiente su comunicacin con los sistemas gestores que ya hemos mencionado. La configuracin de un perfil de driver Nativo es muy similar a la configuracin de un perfil para conexin mediante ODBC. Para crear un perfil mediante un dirver nativo, se escoge el cono de perfil de la PowerBar y se escoge el sistema de gestin con el que se desea que la aplicacin se comunique, una vez hecho esto, se escoge New del men que se presenta. Con esto se consigue abrir el cuadro de dilogo Database Profie Setup. La principal diferencia entre ste y uno para conexin ODBC es la lengeta conexin la cual pasamos a describir a continuacin: Profile Name Connect Information Sever nombre del servidor donde se encuentra instalada la base de datos Log Id un usuario vlido Password el password que corresponda al Log Id DataBase nombre de la base de datos (solo el nombre sin extensin) Language lenguaje que se desea usar en la comunicacin a SQL Server Other Isolation Level: nivel de aislamiento Autocommit mode: autocommit despues de cada transaccin Commit on disconnect: commit despues de que desconecte la aplicacin Prompt for database information: Select this checkbox to be prompted for connection information when creating or selecting a profile to access a database. Generate trace Select this checkbox to start the Database Trace tool in order to trace your connection. NOTA: Se puede trabajar por medio de driver nativo y adems tener un archivo .Ini para la conexin de n usuarios. La principal diferencia entre los preview de una conexin de Driver nativo y una con ODBC, es que en driver nativo no se hace uso del DBPARM, que en conexiones con ODBC, con una cadena de conexin podamos almacenar todos los parmetros necesarios para realizar la conexin, almacenbamos el nombre del DSN, usuario, password, ect. Ejemplo de preview con ODBC: // Profile Perfil_empleado SQLCA.DBMS = "ODBC" SQLCA.AutoCommit = False SQLCA.DBParm = "ConnectString='DSN=DSN_Empleado;UID=MakerTables;PWD=MakerTables ;',PBCatalogOwner='MakerTables'" En cambio en el preview con dirver nativo se presenta una conexin como la siguiente: // Profile prf_Pubs_Nativo SQLCA.DBMS = "MSS Microsoft SQL Server 6.x" SQLCA.Database = "pubs"
SQLCA.AutoCommit = False SQLCA.DBParm = "" Es ovbio, sin embargo lo apuntamos, en un ambiente de cliente servidor, tanto el usuario como el password se deben cargar en RunTime.
16
El servidor de ULACIT se representa como: @tns.labs TNS = tnsnames, que es una cadena de configuracin del servidor. Para ms informacin: Oracle NetWork Adm tnsnames.ora.
lo cual por facilidad de manejo sus nombres pueden diferir solo por un sifijo agregado al datawindow que servir de consulta; hecho est una vez que se tenga abierto el datrawindows de mantenimiento y se quiera una consulta sobre el mismo el men que la llama solo la debe difereir agregandole al nombre de datawindow que se tenga abierto el sufijo que indicar el datawindow que se quiera para consulta. En lo que respecta a consultas PowerBuilder deja que la prmer fila del resultado que devolver se use solo para ordenamiento segn desee el usuario. En el evento open de esta ventana lo primero que se hace es agregarle a una variable de instancia (= p), definida dentro de w_mant, que es del tipo param_mant, el valor que contenga la varible global message este valor es el parmero que se pas cuando se llam a la funcin OpensheetWithParm() y como quien llama a la funcin es el men mantenimiento de departmentos su valor ser p.dataobject = "d_dep_01" p.Title = "MANTENIMIENTO DE DEPARTAMENTOS" por tanto en este evento lo que se hace es segn esos parmetros, cargar el ttulo de la ventana y el objeto datawindows que dar soporte al mantenimiento. Ejemplo: This.title = parametros.Title dw_1.dataobject = parametros.dataobject