Documentos de Académico
Documentos de Profesional
Documentos de Cultura
Manualprogressmio PDF
Manualprogressmio PDF
Base de Datos
Algunos de los problemas que se presentan cuando no se utiliza una base de datos son:
MODELO DE DATOS
Modelos lógicos basado en objetos: Se usan para describir a los datos en los niveles de
conceptual y de visión entre los mas conocidos se encuentran:
• Modelo Entidad-Relación.
• Modelo Orientado a Objetos.
• Modelo Binario.
• Modelo Semántico de Datos.
• Modelo Infológico.
• Modelo Funcional de datos.
Modelo Entidad-Relación
Se basa en una percepción del mundo real que consiste en un conjunto de objetos
básicos llamados entidades y las relaciones entre ellos.
Entidades
Son objetos fundamentales del mundo real acerca de los cuales se almacena
información. Estos objetos pueden ser distinguibles mediante sus características llamadas
atributos que los hacen únicos. Se clasifican en dos grupos:
1. Entidades fuertes: Tienen identificadores que determinan de una manera única a las
ocurrencias de las entidades. Por lo tanto se puede afirmar que tienen existencia de
otras entidades.
2. Entidades débiles: Su existencia depende de los atributos de una o más entidades
“padres” por lo tanto su existencia está limitada por la existencia de las entidades
padre.
Atributos: Son las características que poseen las entidades mediante las cuales se pueden
describir y que tomadas todas en conjunto hacen que dicha entidad sea única.
Relación: Es la asociación entre las entidades. La relación puede ser Simple o Compleja.
• Simple: Es cuando existe una relación de uno a uno.
• Compleja: Es cuando existe una relación de 1:M, M:1, M:M.
Diagrama Entidad-Relación
Es la representación gráfica lógica global de una base de datos, puede representarse
gráficamente por medio de un diagrama de E-R que consta de los siguientes componentes:
Entidades :
Atributo
Atributo Compuesto
Relación 1:1
La llave primaria de una de las dos tablas o entidad pasa a la siguiente tabla o
entidad.
Relación 1:M, M:1
La llave primaria de la tabla que tiene la relación número 1 pasa como llave foránea
a la tabla de relación de muchos.
Relación M:M
Se formara una nueva tabla que contenga las llaves primarias de ambas tablas o
entidades y estas formaran una llave primaria en la nueva tabla, separadamente serán llaves
foráneas.
Proceso de normalización
AUTORES Y LIBROS
NOMBRE NACION CODLIBRO TITULO EDITOR
Date USA 999 IBD AW
Ad.Mig. ESP 888 CyD RM
Ma.Piat. ITA 777 CyD RM
Date USA 666 BdD AW
Asegurando:
El proceso de normalización nos conduce hasta el modelo físico de datos y consta de varias
fases denominadas formas normales, estas formas se detallan a continuación.
Definición de la clave
La solución en este caso es asignar un código de alumno a cada uno, un número que
identifique al alumno y que estemos seguros que es único.
Una vez definida la clave podremos pasar a estudiar la primera forma normal.
Se dice que una tabla se encuentra en primera forma normal (1NF) si y solo si cada uno de
los campos contiene un único valor para un registro determinado. Supongamos que
deseamos realizar una tabla para guardar los cursos que están realizando los alumnos de un
determinado centro de estudios, podríamos considerar el siguiente diseño:
Podemos observar que el registro de código 1 si cumple la primera forma normal, cada
campo del registro contiene un único dato, pero no ocurre así con los registros 2 y 3 ya que
en el campo cursos contiene más de un dato cada uno. La solución en este caso es crear dos
tablas del siguiente modo:
Tabla A
Código Nombre
1 Marcos
2 Lucas
3 Marta
Tabla B
Código Curso
1 Inglés
2 Contabilidad
2 Informática
3 Inglés
3 Informática
Como se puede comprobar ahora todos los registros de ambas tablas contienen valores
únicos en sus campos, por lo tanto ambas tablas cumplen la primera forma normal.
Una vez normalizada la tabla en 1NF, podemos pasar a la segunda forma normal.
La segunda forma normal compara todos y cada uno de los campos de la tabla con la clave
definida. Si todos los campos dependen directamente de la clave se dice que la tabla está es
segunda forma normal (2NF).
Supongamos que construimos una tabla con los años que cada empleado ha estado
trabajando en cada departamento de una empresa:
Tomando como punto de partida que la clave de esta tabla está formada por los campos
código de empleado y código de departamento, podemos decir que la tabla se encuentra en
primera forma normal, por tanto vamos a estudiar la segunda:
Por tanto, al no depender todos los campos de la totalidad de la clave la tabla no está en
segunda forma normal, la solución es la siguiente:
Tabla A
Código Empleado Nombre
1 Juan
2 Pedro
3 Sonia
4 Verónica
Tabla B
Código Departamento Dpto.
2 I+D
3 Sistemas
6 Contabilidad
Tabla C
Código Empleado Código Departamento Años
1 6 6
2 3 3
3 2 1
4 3 10
2 6 5
Podemos observar que ahora si se encuentras las tres tabla en segunda forma normal,
considerando que la tabla A tiene como índice el campo Código Empleado, la tabla B
Código Departamento y la tabla C una clave compuesta por los campos Código Empleado y
Código Departamento.
Se dice que una tabla está en tercera forma normal si y solo si los campos de la tabla
dependen únicamente de la clave, dicho en otras palabras los campos de las tablas no
dependen unos de otros. Tomando como referencia el ejemplo anterior, supongamos que
cada alumno sólo puede realizar un único curso a la vez y que deseamos guardar en que
aula se imparte el curso. A voz de pronto podemos plantear la siguiente estructura:
Tabla A
Código Nombre Curso
1 Marcos Informática
2 Lucas Inglés
3 Marta Contabilidad
Tabla B
Curso Aula
Informática Aula A
Inglés Aula B
Contabilidad Aula C
Una vez conseguida la segunda forma normal, se puede estudiar la cuarta forma normal.
Una tabla está en cuarta forma normal si y sólo si para cualquier combinación clave -
campo no existen valores duplicados. Veámoslo con un ejemplo:
Geometría
Figura Color Tamaño
Cuadrado Rojo Grande
Cuadrado Azul Grande
Cuadrado Azul Mediano
Círculo Blanco Mediano
Círculo Azul Pequeño
Círculo Azul Mediano
Comparemos ahora la clave (Figura) con el atributo Tamaño, podemos observar que
Cuadrado Grande está repetido; igual pasa con Círculo Azul, entre otras. Estas repeticiones
son las que se deben evitar para tener una tabla en 4NF.
La solución en este caso sería la siguiente:
Tamaño
Figura Tamaño
Cuadrado Grande
Cuadrado Pequeño
Círculo Mediano
Círculo Pequeño
Color
Figura Color
Cuadrado Rojo
Cuadrado Azul
Círculo Blanco
Círculo Azul
Existen otras dos formas normales, la llamada quinta forma normal (5FN) que no detallo
por su dudoso valor práctico ya que conduce a una gran división de tablas y la forma
normal dominio / clave (FNDLL) de la que no existe método alguno para su implantación.
Introducción al Progress
Qué es progress?
Aplicaciones:
• Data Dictionary
• Procedure Editor
• Data Administration
• Application Compiler
• Pro tools
• AppBuilder
• Report Builder
Data Dictionary
Procedure Editor
Data Administration
Application Compiler
-Permite compilar uno o varios programas asociados con una aplicación en un simple paso.
Pro tools
AppBuilder
Report Builder
Se usa para definir reportes del usuarios. Permite incorporar reportes predefinidos en una
aplicación.
Archivos de Progress
Cuando se esta trabajando con progress, este automáticamente genera diferentes clases de
archivos:
Archivo de Programas
Progress genera 3 tipos de archivos de programa dependiendo del trabajo que se esté
desarrollando:
Procedimientos
Un procedimiento es llamado en tiempo de ejecución. Esto significa que los valores de las
variables y expresiones, así como las referencias a los registros de la base de datos se
evalúan cuando el programa corre. Después de ejecutar un procedimiento, PROGRESS
ejecuta el siguiente estatuto después de la llamada del procedimiento.
En las siguientes tabla se hace una comparación entre estos dos tipos de procedimientos:
Archivos Include
Son procedimientos que fueron almacenados separadamente en un archivo con extensión .i,
estos archivos pueden ser usados por otros procedimientos.
El código de procedimiento interno existe una sola vez en el archivo de procedimiento, aún
cuando sea llamado muchas veces.
El modelo de PROGRESS para el movimiento de datos entre la Base de datos y el
usuario.
Para que el usuario final tenga acceso a la base de datos, los datos se deben mover entre la
base de datos y la IU (interfase usuario). Para permitir esto, se deben usar los estatutos de
movimientos de datos de PROGRESS. Parte de este código es creado en la sección de
AppBuilder cuando se define la interfase de usuario. Por ejemplo, cuando se agregan
campos de base de datos a una ventana, el AppBuilder crea el código necesario para extraer
los datos y desplegarlos en la pantalla en el formato que se haya especificado.
Buffer de registro
Un buffer de registro contiene solamente campos de un registro de una tabla de una Base de
datos. Esto es equivalente a un renglón de la tabla.
Debido a que un buffer de registro contiene un solo registro de una sola tabla de la Base de
datos, si se accesa más de una tabla de la Base de datos, cada una de ellas tendrá su propio
buffer de registros y cada buffer de registro contendrá solamente un registro o renglón de
esa tabla a la vez.
Buffer de pantalla
El buffer de pantalla es una abstracción par almacenar los datos de todos los dispositivos de
entrada / salida. Esto no indica que se representan los datos únicamente en la pantalla,
aunque en la mayoría de los casos este sea el dispositivo de entrada / salida más usado. Por
lo tanto, el buffer de pantalla se usa para indicar entrada o salida desde: la pantalla. CRT o
cualquier otro monitor; la impresora o plotter el usuario, incluyendo el teclado, el mouse o
cualquier otro dispositivo de entrada.
Diccionario de Datos
Es una herramienta iterativa basada en ventanas con la que se puede crear, modificar y
eliminar base de datos de PROGRESS, también se pueden generar reportes del esquema de
la base de datos.
Creación de Base de Datos
NOTA:
Para Conectarse a una base de datos en Progress:
El Metaesquema
Tablas
Las tablas definen a las entidades que componen el diseño de Base de datos relacional.
• Hidden: Oculta un archivo para evitar que sea desplegado en la lista de archivos del
diccionario de datos.
• Frozen: Evita que las definiciones de campos e índices sean modificadas. No
incluyen los registros de datos.
• La opción de String Attrs, se utiliza para definir los atributos de las etiquetas de un
archivo que va a ser traducido por el Traslation Manager.
• Validaciones: Establece una expresión que si al ser evaluada, resulta falsa, evita
que el archivo sea eliminado.
• Triggers: Es un código 4GL que se ejecuta como resultado de un evento de base de
datos, como:
borrar y crear archivos.
Ejemplo: Trigger Procedure for Create of articulo
Campos
Los campos son los atributos de las tablas. En el diccionario de datos es posible
definirles, entre otras, las siguientes características:
Crear campos:
Nombre
Tipo de dato
Formato de captura
Etiqueta
Etiqueta para desplegado
Valor inicial
Orden del campo
Descripción
Ayuda
Mandatory
Case Sensitive
Extent
Propiedades de los campos:
¿Qué es un Índice?
Es un dato elemental de un registro que se utiliza como criterio de identificación.
Tipos de Índices
• Primario:
Establece por default que el archivo será ordenado por este campo a menos que se
especifique el ordenamiento por otro índice.
• Activo:
Índica si un índice esta activo o no. En el caso de que se establezca un índice en un
archivo muy largo es más eficiente definirlo como inactivo y solamente activarlo
cuando sea necesario.
• Único:
Indica que el contenido del índice debe de ser diferente.
Ej. R.F.C., Matricula, Curp, etc.
• Word index:
Permite accesar búsquedas por palabras o por frases sobre el campo.
• Abbreviated:
Permite que el registro sea accesado utilizando los primeros caracteres del
Campo. Se utiliza solamente en campos de tipo carácter.
• Add
Sirve para declarar como índice el campo que se encuentra seleccionado en el
rectángulo del lado izquierdo. Al hacer clic sobre este botón, dicho campo pasa al
rectángulo del lado derecho.
• Remove
Sirve para eliminar el índice seleccionado en el rectángulo derecho. Al hacer clic sobre
este botón, se elimina dicho índice y pasa al campo al rectángulo del izquierdo.
• Move Down:
Sirve para mover el índice seleccionado una posición abajo.
• Move Up:
Sirve para mover el índice seleccionado una posición arriba.
Secuencias
Una secuencia es un objeto de base de datos que proporciona valores incrementales a una
aplicación. Puede generar valores secuenciales dentro de cualuier rango de enteros, con
valores positivos o negativos.
Principales funciones:
Dump y Load de datos.
Exportar e Importar datos.
Seguridad en base de datos.
Proceso Dump
Genera archivos que pueden contener definiciones, datos de los archivos de la base de
datos.
Principales opciones:
Proceso Load
EL EDITOR DE PROCEDIMIENTOS
TECLA F1 F2 F3 F4 F6 F7 F8 F9
FUNCION Help Run Open Save Buffer Close Encontrar
Siguiente siguiente
SHIFT + Revisar New Debug Guardar Buffer Encontrar
TECLA sintaxis Como Anterior anterior
CTRL + Ventana de
TECLA procedimiento
nueva
TECLA X C V F R G L E
CTRL.+ Cut Copy Paste Find Replace Go to List Mensajes
line Buffers de
compilador
Para crear un archivo nuevo p se debe comenzar en la opción new de menú file o
usar la combinación de teclas <shift><F3>.
Para abrir un archivo .p creado anteriormente, se puede usar la opción open del menú file o
la tecla <F3>.
Si se quiere saber cuales archivos están abiertos o sin guardar, se puede usar la
combinación de las teclas <Ctrl><L> o seleccionar la opción list del menú Buffer
Cuando se está trabajando con varios archivos o buffers que no se han guardado, y
se desea saber cuales son los que se encuentran activos, se emplea la combinación de teclas
<CTRL><L> o se selecciona la opción List del menú Buffer. La caja de diálogo que
muestra la lista de los buffers abiertos, muestra resaltado el que se está usando ese
momento al final de la lista. Sin embrago se puede seleccionar otro buffer haciendo doble
clic en el nombre del que se desea ir , o seleccionándolo y seleccionando el botón OK. Para
desplazarse entre los buffers estando en la ventana de edición, se puede usar la tecla <F7>
para ir al siguiente buffer, o la combinación de las teclas <Shift><F7> para ir al buffer
anterior.
Lista de Buffers
Con PROGRESS es posible trabajar con varias ventanas en la pantalla a la vez, esto
tiene la ventaja de que se pueda cortar, copiar y pegar entre las ventanas.
Cuando se hace clic en el botón derecho del mouse, se despliega un menú pop-up el
que se pueden ejecutar alguna de las tareas que se encuentran en la barra de menús del
editor. De esta manera se pueden insertar dentro del código del procedimiento elementos
tales como nombres o campos de la Base de datos conectada o el contenido de un archivo.
Verificación de sintaxis
Para verificar la sintaxis de un procedimiento, éste se puede correr para probarlo y usar el
depurador (debugger) del editor. También se puede revisar la sintaxis mediante las teclas
<Shift><F2> o seleccionando la opción check sintaxis del menú Compile.
Para correr un procedimiento se puede presionar la tecla <F2> o seleccionar la opción Run
del menú Compile. Cuando se corre un procedimiento en el Editor de Procedimientos,
PROGRESS primero lo compila temporalmente y posteriormente lo ejecuta. Se puede
compilar permanentemente un procedimiento y convertirlo en un archivo con extensión .r,
pero se debe hacer separadamente. Se puede compilar un procedimiento con le estatuto
COMPILE o usando la opción Application Compiler del menú Tools.
El estatuto COMPILE
Para compilar un procedimiento cuando está desplegado como buffer actual, en una
ventana de procedimiento, se puede emplear la opción Application Compiler del menú
Tools, esto permite definir los parámetros iterativamente con aquello que se hayan
especificado en el estatuto COMPILE.
COMPILE nom_proc
[ LISTING lista-nom-arch ]
[ XREF xref-nom-arch ]
El empleo de la opción Compiler del menú Options permite definir algunos parámetros
opcionales del comando compile de la misma manera que se haría con es estatuto
COMPILE.
CAPÍTULO V
SINTAXIS DEL LENGUAJE DE PROGRESS
Símbolos especiales
En PROGRESS se utilizan los siguientes símbolos en sus procedimientos:
Símbolo Papel
/* */ Encierran un comentario
* Comodín, sustituye a cualquier grupo de
caracteres
Punto ( . ) • Termina una instrucción
• Comodín para un carácter
• Separador. Separa el nombre de la
base de datos del nombre de la tabla
y del nombre del campo
Dos Puntos ( : ) Terminación de Block, encabezado o
etiqueta de Block.
Introduce una atributo a la sintaxis de
traducción
Introduce un atributo a un objeto o método
? Designa un valor desconocido
~ Causa que el siguiente carácter sea tratado
como literal
“” o ‘‘ Encierra a una cadena de caracteres
{nombre-archivo} Incluye referencia de archivo
{} Argumentos de paso
[] Referencia a una matriz, se usa para
subindicar la matriz y los valores iniciales
{&} Variable del preprocesador
Objetos de interfase de usuario
Elemento Descripción
Object Elemento básico o componente de la GUI
Events Acción emprendida por el usuario sobre
algún objeto
Trigger Respuesta programada para un evento.
Handle Indicador nombrado para un objeto.
Attribute Alguna característica de un objeto ya sea que
se puede leer o asignar diferente valor
Method Acción sobre algún objeto que regresa algún
valor
La sintaxis de los estatutos de PROGRESS esta formada por una combinación de: Una
palabra clave (keyword) obligatoria, parámetros y opciones específicas del estatuto, frases,
expresiones y un terminador de estatuto que generalmente es un punto (.)
Componente Papel
Keyword Es el verbo principal de la declaración,
designa la acción o el proceso que se ha de
ejecutar
Parametre(s) and Option(s) Información adicional que indica que algo
esta cambiando la acción o proceso
designado por la declaración.
Phrase(s) Algún elemento común del lenguaje
significa que pueden aparecer en algunas
declaraciones de PROGRESS
Expression Es una combinación de variables, constantes
y operadores que evalúan a un elemento de
la sintaxis.
Terminator Es el que le indica PROGRESS que termina
una declaración.
Uso de variables
Para poder usar una variable en PROGRESS, es necesario primero definirla, declarando su
tipo y opcionalmente la forma en que se desplegará y posteriormente se le deben asignar los
valores correspondientes. La definición de una variable reserva espacio para ella en un
buffer similar al buffer de registro (llamado buffer de variable)
Definición de variables
Cuando se define una variable, se debe especificar si es una sola variable o una matriz
describirla indicando el tipo de dato, valor inicial (si debe llegar alguno), etiqueta y los
colores del fondo y primer plano, asi como la forma en que se visualizará usando algún tipo
de objeto de la UI.
Sintaxis
[ [ NOT ] CASE-SENSITIVE ]
[DECIMALS n ] [EXTENT n ]
[ INITIAL valores ]
[LABEL string]
[ NO-UNDO ]
Sintaxis
Sintaxis
Ejemplo:
ASSIGN
Var1 = 3.1
Var2 = “hola”
Var3 = 1
Var4 = 2
Sintaxis
Expresión [ format-phrase ]
DISPLAY SPACE [(N)] [frame-phrase]
SKIP [(n)]
En la siguiente tabla se indica el significado de cada uno de los parámetros que se emplean
con el estatuto DISPLAY:
Parámetro Designa
Expresión Lo que se despliega. Puede ser una variable,
una constante o un campo de base de datos
Format-phrase Como se despliega el dato
Frame-phrase Características del marco que contiene los
elementos desplegados.
SPACE [(N)] Número de espacios que se despliegan.
Puede ser cero o un número positivo. Si es
mayor el espacio del que cabe en la línea,
PROGRESS salta a la siguiente línea y no
despliega más espacios.
SKIP [(N)] Número de líneas que debe saltar:
• Si n es cero o si no se especifica ,
PROGRESS salta a la siguiente línea,
a menos que ya haya saltado a una
nueva línea debido a la longitud de
los datos desplegados.
• Si se especifica SKIP (1)
PROGRESS salta a una nueva línea
sin importar que ya haya saltado una
nueva línea.
Para permitir al usuario introducir datos se usan los siguientes estatutos SET,
PROMPT-FOR Y UPDATE.
PROMPT-FOR
Interactúa solamente con el buffer de pantalla, permite al usuario introducir valores pero no
los pasa al buffer de registro por lo que no se pueden tomar valores para usarlos ya que
dichos valores permanecen en el buffer de pantalla solamente. Para poder usar estos valores
se debe usar la función INPUT.
Ejemplo:
/* p5-13 */
DEFINE VARIABLE nombre AS CARÁCTER FORMAT “X (20)”
LABEL “Introduzca su nombre”.
DEFINE VARIABLE saludo AS CARÁCTER FORMAT “X (27)”
PROMPT-FOR nombre.
ASSIGN saludo = “Hola, ” + INPUT nombre + “!” .
DISPLAY saludo.
El estatuto SET
Se le puede pedir al usuario que introduzca un valor , que será asignado a una variable
(PROGRESS lo pasa del buffer de pantalla al buffer de registro)
Ejemplo:
/* p5-12 */
DEFINE VARIABLE name AS CARÁCTER FORMAT “X (20)”
LABEL “Introduzca su nombre”.
DEFINE VARIABLE saludos AS CARÁCTER FORMAT “X (27)”
SET name.
ASSIGN saludos = “Hola, ” + name + “ ! ” .
DISPLAY saludos.
El estatuto UPDATE
El estatuto UPDATE despliega los campos o variables, solicita al usuario una entrada y
posteriormente la coloca tanto en el buffer de pantalla como en los campos o variables
específicos. Es una combinación de los siguientes estatutos:
UPDATE
[{field [format-phrase][WHEN expression]}|
{TEXT (field [format-phrase]…)}|
{field = expression }| {constant [ A T n|TO n]}|
{^}|{SPACE [(n)]}|{SKIP[(n)]}]….
[GO-ON (key-label…)] [frame-phrase] [editing-phrase]
[NO-ERROR]
Ejemplo de sintaxis
/* r-updat2.p */
El segundo block lee cada registro de la tabla order que pertenece a customer, despliega el
campo order-num y permite modificar los campos promise-date y ship-date. La opción
VALIDATE asegura que no se introduzca un fecha de envío anterior a la actual. Este
procedimiento.....sigue
Las expresiones son parecidas a una formula en donde se combinan variables y/o
constantes junto con algunos operadores. Los elementos que se pueden usa son: constantes,
variables, campos de base de datos atributos de los objetos y operadores.
Operadores
Los operadores que se usan en PROGRESS pueden ser aritméticos, lógicos o de
comparación, en las siguientes tablas se muestran los tres tipos:
Operadores Aritméticos
Símbolo Operación
+ Valor positivo
Suma numérico y de operandos de fecha
Concatenación de operandos string
- • Valor negativo
• Resta numérica y de operandos de
fecha
* Multiplicación de dos operandos de fecha
/ División de dos operandos numéricos,
produce un valor decimal.
Operadores Lógicos
Operadores de comparación
Estatuto CONNECT
Para que un procedimiento que accesa a una base de datos, corra debe contenerse a la base
de datos referida esto se puede hacer desde el DATA DICTIONARY o bien mediante el
estatuto CONECT desde un procedimiento. Para que el usuario se conecte a una o más
bases de datos se deben usar el estatuto CONNECT. Las operaciones que se emplean para
conectarse a una base de datos son las mismas que se usan en el diccionario de datos.
Al conectarse a una base de datos se puede usar o no el nombre físico con el path completo.
También se puede indicar un nombre lógico, sin embargo si no se indica el nombre lógico,
PROGRESS le asigna uno usando el mismo nombre del archivo sin extensión o path. El
nombre lógico es necesario para desconectarse de la base de datos.
Sintaxis:
CONNECT ({physical-name} [options] options ) [NO-ERROR]
Estatuto DISCONNECT
Para desconectarse de una o más bases de datos desde un procedimiento se usa el estatuto
DISCONNECT
Sintaxis:
DISCONNECT {logical-name} [NO-ERROR]
Las funciones son procedimientos preconstruidos que pueden tomar parámetros y siempre
regresan un valor. Cuando se usa una función, el valor que regresa se puede desplegar o
asignarlo a una variable o campo de base de datos. PROGRESS proporciona un gran
número de funciones, entre las que se encuentran funciones para:
• Verifica el estado de una conexión a una base de datos.
• Manipulación del PROPATH.
• Manipulación y cálculo de fechas.
• Manipulación de strings.
• Conversiones de tipo de datos.
• Comandos del sistema operativo.
Funciones de conexión
Las funciones relacionadas con la conexión permite verificar la conexión a una base de
datos y regresa alguna información de la misma. En la siguiente tabla se describen algunas
de las funciones de conexión:
Los string se pueden concatenar usando el operador (+) para pegar dos o más strings de la
siguiente manera:
String1 + String2
En la siguiente tabla se describe algunas de las funciones y operaciones que se puedan
aplicar a los strings:
Las funciones relacionadas con las fechas permiten obtener la fecha actual o manipular la
información de fechas. En la siguiente tabla se hace una descripción de las funciones de
fecha:
Ejemplo:
Usando Set
Se puede utilizar el SET para vaciar pronto algunos valores, y entonces estos
valores son asignados a las variables.(Progress mueve el registro del buffer).
El siguiente ejemplo permite la entrada hasta el primer nombre.
Usando el Prompt-For
BLOQUES EN PROGRESS
¿ Qué es un bloque ?.
Una serie de estatutos que PROGRESS trata como una sola unidad para definirles
características.
-Generalmente un bloque comienza con un estatuto de encabezado y concluye con un
estatuto END.
Tipos de Bloques
Procedimientos:
- Procedimiento principal.
- Procedimiento interno.
- Procedimiento externo (programas).
Triggers.
Bloques de control:
- DO.
- REPEAT.
- FOR EACH.
Bloques de Control
-
- Bloque de DO.
Es usado generalmente para agrupar estatutos y éstos sean tratados como una sola
unidad.
Sintaxis parcial:
{ label : }
DO { FOR record }
{ variable = expression 1 TO expression 2 { BY k } }
{ WHILE expression }:
/*Programa que ejemplifica el uso del DO*/
DEFINE VARIABLE i As INTEGER.
Mensaje:
DO i=1 TO 5 BY 1:
DISPLAY “Progress ”.
END.
Bloque de REPEAT.
Este bloque tiene implícito el servicio de ciclo.
Sintaxis parcial:
[ label:]
REPEAT [FOR record
[variable = expresion1 TO expresion2 [BY k] ]
[WHILE expresion ]:
Sintaxis:
IF condición THEN expresión 1 [ELSE expresión 2]
Estatuto Case
Sintaxis:
CASE expression:
WHEN value1 [.. OR WHEN valuen....] THEN { } WHEN...
OTHERWISE { }
END [ CASE]
DO...WHILE
Sintaxis:
[etiqueta:]
DO[WHILE expresión]
Estatutos….
END:
REPEAT… WHILE
Sintaxis:
[etiqueta:]
REPEAT [WHILE expresión]
Estatutos….
END.
Estatuto Especifica...
NEXT [etiqueta] Va directamente al final del block e inicia el
procesamiento de su siguiente interacción.
LEAVE Sale del block y continua procesando el
siguiente estatuto.
LEAVE
Sintaxis:
loop:
REPEAT:
estatutos...
IF......THEN......LEAVE loop.
estatutos
END.
Laboratorio
2. Hacer un programa que muestre la fecha actual y diga cuantos años le faltan para el
2020.
Solución:
DEFINE VAR tday AS DATE.
DEFINE VAR tyear AS INTEGER.
DEFINE VARIABLE yleft AS INTEGER FORMAT 9.
ASSIGN
tday = TODAY
tyear = YEAR (tday)
yleft = 2020 - tyear.
DISPLAY “La fecha de hoy es:” tday SKIP (1).
DISPLAY “Faltan” yleft “años hasta llegar al 2020”.
3. Hacer un programa que diga que día de la semana es hoy. Si es sábado o domingo,
que salude al usuario deseándole un feliz fin de semana. Sí es viernes que
despliegue el mensaje “¡Al fin es viernes!”.
Solución:
DEFINE VAR tday AS DATE.
DEFINE VAR wdayi AS INT.
DEFINE VAR wday AS CHAR INITIAL
[“Domingo, Lunes, Martes, Miércoles, Jueves, Viernes, Sábado”].
ASSIGN
tday = TODAY.
wdayi = WEEKDAY(tday).
DISPLAY “La fecha de Hoy es:” tday
SKIP (1) WITH NO-LABEL.
CASE wdayi:
WHEN 1 OR WHEN 7 THEN
DISPLAY “¡Que tengas un buen fin de semana!”.
WHEN 6 THEN
DISPLAY “¡Finalmente es Viernes!”.
OTHERWISE
DISPLAY SKIP (1)
“Hoy es”
+ STRING(ENTRY(WEEKDAY(tday), wday))
+ “.” FORMAT “X(25)”.
END CASE.
COMANDOS A UTILIZAR
• ALTAS INSERT
• BAJAS DELETE
• CAMBIOS UPDATE
• CONSULTAS DISPLAY
Estatuto FIND
• Para accesar un registro específico de la base de datos y ponerlo en el buffer de
registro, se utiliza el estatuto Find.
DISPLAY articulos.nomart
articulos.Cantidad
articulos.descart.
FIND articulos
WHERE articulos.noart = 3.
DISPLAY articulos.noart articulos.nomart.
PAUSE.
Función AVAILABLE
Para usarse en conjunto con el estatuto FIND, debe usarse con la opción de NO-ERROR.
Sintaxis: AVAILABLE record
Características
Para utilizar un QUERY es necesario seguir la secuencia:
• Definir el QUERY.Abrir el QUERY.Hacer uso del QUERY.
• Cerrar el QUERY
Uso de Queries
Definición del Query
• La definición del query requiere que le sean definidas todas las tablas a ser
utilizadas.
Cache
Indica el número de registros que serán mantenidos en memoria.
La opción SCROLLING debe ser usada cuando se desea tener la capacidad de
reposicionarse libremente en el query.
En caso de ser seleccionada la opción caché es activada por default la opción Scrolling.
• Uso del estatuto GET
• Funciona parecido a un estatuto FIND, con la diferencia de que este estatuto
funciona con un query definido.
• El estatuto GET mueve información de la base de datos al buffer de registro.
* Si se ejecuta un GET NEXT después del último registro disponible del query, la
condición de error NO se habilita. Se debe aplicar la función Available para probar si se
regresó el registro.
*Cuando se ejecuta el estatuto GET, cualquier trigger de FIND definido para las tablas se
ejecuta.
Estatuto Update
* Sintaxis (parcial): UPDATE [field [ WHEN expression
{SPACE [(n ) ]} | { SKIP [(n)]}]]...[NO ERROR]
REPEAT:
UPDATE v-articulo.
FIND articulos WHERE articulos.noart =
v-articulo NO-ERROR.
IF AVAILABLE articulos THEN DO:
DISPLAY articulos.noart.
UPDATE articulos.nomart articulos.descart articulos.Cantidad.
END.
END.
CREACION DE REGISTROS
Estatuto CREATE
Este estatuto crea un registro nuevo vacío y la copia al buffer de registro. Si hay
valores iniciales estos son asignados aquí .
Sintaxis (parcial):
MESSAGE mensaje { SKIP [ (n) ]} [ VIEW -
AS ALERT-BOX] [tipo-ventana][ BUTTONS
tipo-botones ] [ UPDATE variable ].
Estatuto INSERT
Sintaxis: INSERT record [EXCEPT field...][NO-ERROR]
Este estatuto crea un nuevo registro de base de datos, despliega los valores iniciales para los
campos del registro permite capturar sus valores, y asigna dichos valores al registro.
BORRADO DE REGISTROS
Estatuto DELETE
o Sintaxis DELETE record [VALIDATE (condition, msg-expression)] [NO-
ERROR]
define frame a
nomart skip
Cantidad skip
descart skip
U s o d e l Bro w s e
¿ Qué es un Browse ?
Es una lista de selección de registros de la base de datos.
o Sintaxis (parcial):
Estatuto Release
Verifica que un registro cumpla con un campo obligatorio y las definiciones únicas
del índice. Elimina el registro del buffer y lo asocia a la base de datos si lo ha de modificar.
FRAMES
¿Qué es un Frame?
o Un frame es un área rectangular que Progress usa para desplegar objetos a nivel de
campo.
Estatuto Enable
Valida entradas para uno o más niveles de campo y [widgets] del frame del child dentro
de un frame.
FORM
upd-articulos exit-app SKIP(1)
brow-articulos
WITH FRAME main-frame.
FORM
articulos EXCEPT descart
WITH FRAME curr-frame COLUMN 40.
ON CHOOSE OF upd-articulos
DO: /* TRANSACTION */
FIND articulos WHERE ROWID(articulos) = curr-articulos
EXCLUSIVE-LOCK.
UPDATE articulos WITH FRAME cust-frame VIEW-AS
DIALOG-BOX
TITLE "articulos Update".
methRtn = brow-articulos:REFRESH().
Manejo De Errores
Procesamiento de errores
El procesamiento de los errores de Progress depende del tipo de error generado. Progress
reconoce los siguiente errores:
• Error generado por procedimiento.
• Una tecla predefinida de ERROR.
• Una tecla predefinida de ENDKEY.
• La tecla de END-ERROR.
• Una falla del sistema o software.
Tipo de Error Acción
* Error de procedimiento * UNDO RETRY
Presionar la tecla
* UNDO RETRY
* predefinida de ERROR.
* UNDO LEAVE
* Presionar la tecla
* Presionar la tecla de
END-ERROR. * Deshace la transacción
actual y corre el proc. de
inicio.
* Presionar la tecla de
STOP. * Deshace cualquier transacc.
incompleta para todos los
* Cuando falle el sistema usuarios del sistema.
o FOR EACH.
o DO.
o REPEAT.
n COLUMN
Con esta opción se presentan los elementos del marco en una o más columnas. En este caso
PROGRESS usa la opción SIDE-LABELS por omisión, tomando en como etiquetas los
nombres de las variables.
Cuando se usa la opción n COLUMNS se debe tomar en cuenta el espacio que se necesita
para mostrar los datos en cada columna. Si los datos que se despliegan ocupan más espacio
que del que se dispone para cada columna, PROGRESS trunca los datos.
El uso de esta opción elimina el marco dentro del cual se despliegan los elementos.
/*Ejemplo:*/
/*Ejemplo*/
Con las opciones ROW y COLUMN se pueden colocar el marco de despliegue en cualquier
posición de la ventana.
/*Ejemplo*/
DEFINE VAR var1 AS DECIMALS 1.
DEFINE VAR var2 AS CARÁCTER FORMAT “X(5)” CASE_SENSITIVE:
DEFINE VAR arr AS INTEGER extent 3.
Define var var4 as char format “Q 9” extent 4 initial [1, 2, 3, 4].
Def var var5 as logical format “in/out” initial “in”.
Assign var1 = 3.1
var2 = “HOLA”
arr[1] = 1
arr[2] = 2
arr[3] = 3.
Display “aquí están los valores de hoy: “
var1 FORMAT “99.99”
var2
arr[1] arr[2] arr[3]
arr4[1] var4[2]
var5
with 2 columns column 15 row 5.
Para asignarle un título al marco se usa la opción TITLE. El título se mostrará en la parte
superior del marco, dentro de la ventana de despliegue de PROGRESS.
Con la frame phrase se pueden indicar el aspecto general del marco, como por ejemplo su
ubicación dentro de la ventana. También se controla el aspecto de los campos dentro del
marco al declarar los parámetros del marco tales como SIDE-LABELS y n COLUMNS.
Así mismo, se puede controlar el aspecto y la localización exacta de los elementos del
marco usando format phrase para cada uno de los elementos dentro del marco.
La justificación de los elementos dentro del marco (variable o campos de base datos)se
pueden controlar usando una de las siguientes format phrase:
Con el empleo de la opción TO de la format phrase se pueden colocar los elementos dentro
de un marco para que se desplieguen en una columna determinada. En el siguiente ejemplo
se nota que no es necesario alinear los elementos a la derecha, debido a que los elementos
de datos de tipo CARÁCTER y LOGICAL están lineados dentro de sus campos.
/*Ejemplo/
Con la opción AT de la format phrase, se puede indicar un lugar exacto para cada elemento
dentro del marco. También se puede indicar el alineamiento, ya sea al a izquierda, derecha
o los dos puntos para separar los datos de su etiqueta en la posición indicada con la opción
AT. Si se desea, se pueden alinear los separadores dos puntos de los elementos dentro del
marco usando la opción COLON en la format phrase.
/*Ejemplo*/
def var dec1 as decimals 1 initial 3.1.
def var int1 as int initial 0.
Def var int-arr1 as int 3 initial [1, 2, 3] format “9”.
Def var dea1 as date.
Def var char1 as char format “x(5)” case-sensitive initial “Hola”.
Def var char-arr1 as char format “Q9” Extent 4 initial [1, 2, 3, 4].
Def var log1 as logical format “ In / out” initial “in”.
Con el uso de la frame-phrase junto con el uso de estatuto DISPLAY u otros estatutos se
pueden definir objetos- marco que posteriormente pueden ser usados en estatutos que
despliegan datos. El estatuto DEFINE-FRAME le da un nombre a un marco y define sus
características de despliegue. Posteriormente se pueden desplegar los elementos dentro del
marco al hacer referencia a él a través del nombre indicado en éste estatuto.
Sintaxis
DEFINE-FRAME nom-marco [form-item][frame-phrase]
Form-item
field[format-phrase]
variable [at-phrase]
SPACE[n]
SKIP[n]
Una vez que se haya definido un marco, se puede usar el siguiente formato para frame-
phrase junto con el estatuto DISPLAY:
DISPLAY ..... UIT[FRAME nom-marco]
Existen varias razones para usar marcos con nombre. Se tiene control explícito sobre las
cuales los mismos elementos de marco se muestran; una vez creada la plantilla del marco,
se puede usar par desplegar los mismo elementos en el mismo formato en diferentes lugares
del código, sin tener que repetir la definición del despliegue; se puede reusar la definición
del marco en más de un procedimiento; se puede definir y usar más de un marco en un
procedimiento, mostrando los mismos campos diferentes veces en diferentes posiciones en
la misma pantalla.
/*Ejemplo*/
Def var nombre as char format “x(10)” label “Nombre” initial “Juan”.
Def var appelido as char format “x(15)” label “Apellido” initial “Pérez”.
Def var cia as char format “x(15)” label “compañía ” initial “PROGRESS”.
Display nombre at row1 column 8
apellido at row 1 column 15
cia row 1 column 25
with centered.
Display
nombre at row 5 column 8
“trabaja en “ at row 5 column 15
cia at row 5 column 25
with no-labels centered no-box row 2.
Para obtener las salida deseada, se utilizan dos marcos, uno para desplegar las variables en
una columna y otra para mostrarlas en forma de oración. Se usan dos DISPLAY para
referirse a esos marcos, indicando cual variable va dentro de cual parco para un despliegue
determinado.
/*Ejemplo/
Def var nombre as char format “x(10)” label “Nombre” initial “Juan”.
Def var apellido as char format “x(15)” label “Apellido” initial “Pérez”.
Def var cia as char format “x(15)” label “compañía ” initial “PROGRESS”.