LOOKUP: Se permite este atributo en FRAMES.
SCROLL: Atributo para las variables de tipo CHAR de un FORM o FRAME. Ejemplo:
a = descripcion scroll
Dentro de la sección CONTROL de un FORM se ha añadido la cláusula:
AFTER/BEFORE LINE of tabla
Las instrucciones de estos bloques se ejecutan ANTES y DESPUÉS de la selección de la fila en curso.
Ahora es posible utilizar la cláusula BEFORE CANCEL en la sección EDITING, haciendo así factible la anulación del «cancel» si se desea. Con «next field» continuará la edición normalmente.
Sin embargo, al utilizar las cláusulas AFTER CANCEL en la sección EDITING o BEFORE CANCEL en la sección CONTROL dará error de compilación.
A partir de esta versión el cambio de base de datos producirá el cierre de los cursores de todos los módulos, con lo que el usuario deberá volver a abrir los que necesite y preparar de nuevo las frases que le interesen para la base de datos recién abierta.
Asimismo, habrá que tener en cuenta que al salir de un programa ya no se cierra la base de datos activa en ese momento, como ocurría en la versión anterior.
Lo que se expone a continuación es válido para cualquier instrucción WINDOW que no contenga la cláusula BY COLUMNS.
CLIPPED: Mantiene el encolumnado de los campos de una fila aunque la suma de la longitud de todos ellos supere el ancho de la WINDOW. En este caso, se mostrarán en pantalla únicamente las columnas qu quepan en ese ancho, no pudiéndose ver el resto.
SCROLL: Igual que la anterior, se diferencia no obstante en que posibilita la realización de «scrolling» horizontal cuando la fila no cabe en la ventana.
Estas cláusulas se intercalan en la sintaxis de la instrucción WINDOW de la forma que sigue:
WINDOW [SCROLL | CLIPPED] FROM...
xx COLUMNS: Con CLIPPED o SCROLL indica el ancho de la ventana.
SET: Si se ha especificado SCROLL o CLIPPED y la columna con la que se actualiza la variable no aparece en la ventana, se muestra en «reverse» la primera visible con objeto de saber la línea en curso Esta cláusula, combinada con CLIPPED, permite hacer «set» con campos que no quieren mostrarse al usuario. SET permite ahora utilizar variables locales.
STEP: En una WINDOW FROM file AS FILE con SCROLL, es el número de caracteres que salta al hacer «scroll». Por defecto salta la mitad del tamaño definido para la ventana.
Se ha añadido la cláusula LABEL:
EDIT {FILE expr
| identifier [NO LINES]} AT line,column
WITH lines,columns
[LABEL expr]
que coloca la etiqueta resultado de «expr» en la ventana de edición.
Existe una lista de comandos que pueden ejecutarse directamente sin necesidad de utilizar la instrucción RUN: rm, mv, test, cp, ctlcomp. A esta lista hay que añadir, además: mkdir.
A partir de esta versión, las instrucciones OPEN, EXECUTE, FETCH y FOREACH de un cursor, permiten que la lista de variables que aparece en las cláusulas USING e INTO sea la de un FRAME. La sintaxis es:
OPEN cur USING frame.*
EXECUTE cur USING frame.*
FETCH cur INTO frame.*
FOREACH cur USING frame.* INTO frame.*
La cláusula «AFTER/BEFORE GROUP OF num» puede utilizarse ahora también con frases preparadas. Por ejemplo:
prepare prep from "select
provincia, nombre, direccion from clientes "
&& "order by provincia"
declare cursor c1 for prep
control
after group of 1 ...
putenv(var, valor[, modo])
Añade al entorno de usuario la variable «var» con
el «valor» especificado. El modo es un nuevo parámetro
que indica si esa variable ha de pasarse al CTSQL o no.
Si modo=0, la variable sólo será considerada por el CTL
(y por el CTSQL si es una variable de éste). (Valor por defecto).
Si modo=1, a considerar sólo por el CTSQL.
Si modo=2, por el CTL y por el CTSQL.
Para información más detallada sobre esta función,
véase la pág. A/10 del Manual de Referencia de MultiBase.
Las tres funciones siguientes: fgetquery, addtoclist y endquery, asociadas a un CURSOR, constituyen una herramienta eficaz, por ejemplo, para implementar un GETQUERY con una WHERE todo lo amplia que se precise (joins, group by, etc.).
fgetquery()
Utilizada sin parámetros, limpia la lista de la tabla en curso
del FORM.
addtoclist(rowid)
Añade la fila con el rowid indicado a la lista de la tabla en
curso del FORM.
endquery()
Muestra el número de filas de la lista de la tabla en curso
del FORM y se posiciona en la primera.
sqlreset([flag])
Si flag=0, cierra todos los cursores del módulo, tanto del FORM
y WINDOWS como los de usuario (DECLARE CURSOR). Éste es el valor por
defecto.
Si flag=1, sólo cierra los cursores del FORM.
sqldescribe(instr_select[,flag] ,charseparator])
Dada una instrucción SELECT, devuelve un «string» con
la lista de columnas, sus tipos y, opcionalmente, sus atributos, tal
y como están definidos en la base de datos.
Si flag=0, no incluye atributos (valor por defecto). Si flag=1, incluye
los atributos.
charseparator: Separador de la lista. Por defecto la coma (,).
Ejemplo:
tsql "create table t1 (" &
sqldescribe("select * from clientes") & ")"
sqlselect(instr_select)
Dada una instrucción SELECT, abre un cursor para ella y devuelve
un número de 0 a n que lo identifica, o NULL si se produce algún
error.
sqlfetch(num)
Devuelve la siguiente fila, o NULL si se ha llegado al final, del cursor «num» asociado
a una SELECT. La fila es devuelta en formato UNLOAD.
sqlclose(num)
Cierra el cursor «num».
Ejemplo de utilización de las funciones sqlselect,
sqlfetch y sqlclose:
let num = sqlselect ("select " && elige_cols
() && "from clientes")
let a = sqlfetch (num)
call sqlclose (num)
En este ejemplo se recoge en una única variable de tipo CHAR un conjunto de columnas determinado por la función «elige_cols».
SQLROWS: Esta variable contiene el número de filas procesadas en la última operación de INSERT, DELETE, UPDATE INSERT... SELECT o LOAD FROM... INSERT.
CTLMENUMODE (CTLMM): Sus posibles valores son:
ON: En un menú, las opciones que se van seleccionando mantienen activo el atributo REVERSE (valor por defecto en UNIX y MS-DOS).
OFF: Únicamente se mantiene activo el atributo REVERSE de la opción a seleccionar (valor por defecto en Windows).
PAGEPAUSE: En los STREAMS TO TERMINAL controla las pausas por página.
N: No se detiene.
S: Hace una pausa cada 24 líneas. (Valor por defecto).
P: Se detiene cada N líneas, siendo N el valor indicado en la cláusula
SIZE de la instrucción FORMAT.
MBLANG: Su finalidad es la misma que la de la variable DBLANG (ver Manual de Referencia, pág. A/102), sólo que en este caso no es necesario especificar el subdirectorio «msg», ya que éste es asumido por defecto («$TRANSDIR/msg» -directorio absoluto-). Esta variable tiene prioridad sobre la DBLANG, de forma que si se especifica MBLANG aquélla no tiene efecto.
MBISFILES: Permite modificar el valor considerado como máximo para el número de ficheros abiertos. Por defecto, este valor es 50 para UNIX y 16 para MS-DOS. Por ejemplo: MBISFILES=70 (hasta 70 ficheros abiertos). Existe un valor límite de 100 que no será sobrepasado, con independencia del valor de esta variable.
DBPRIOR: Cambia la prioridad de un programa o usuario:
DBPRIOR=valor
export DBPRIOR
Donde valor es un número de 5 a 200 ambos
inclusive. Un valor de 100 indica una prioridad normal, mientras que 5
es la prioridad mínima (lo más lento), y 200 es la máxima
(lo más rápido). Cualquier valor inferior a 5 tiene el mismo
efecto que éste, y cualquiera superior a 200 el mismo que 200.
Al cambiar la prioridad no se notará ningún efecto apreciable
si el programa MultiBase es el único proceso que se está ejecutando
en la máquina.
La compatibilidad de la versión 2.0 respecto a la anterior está garantizada gracias a la incorporación de la nueva variable de entorno MBCOMPAT.
Asignándole el valor 1, esta variable permite obviar las diferencias con la versión 1.0.
No obstante, existen dos casos particulares en los que es posible indicar si se desea mantener o no la compatibilidad, para lo cual se proporcionan dos nuevas variables: MBCTRMODE y DECNEG.
MBCTRMODE: La cláusula BEFORE de
la sección CONTROL de un FRAME se ejecuta ahora después
de la última cláusula de la sección EDITING, como
ocurre en los FORMS.
A partir de esta versión, la variable CANCELLED se activa también
al realizar un CANCEL en la sección CONTROL.
Para el caso de que se desee mantener el funcionamiento de la versión
anterior, se proporciona la variable de entorno MBCTRMODE, a la que
deberá asignarse el valor 1.
DECNEG: El formato de almacenamiento de
los decimales negativos se ha modificado en esta versión. Si
se quiere mantener el utilizado hasta ahora, deberá emplearse
la variable de entorno DECNEG con el valor 1. De este modo se podrán
utilizar tablas generadas con la versión anterior que contengan
campos decimales con valores negativos.
Para actualizar dichas tablas al formato de la versión 2.0 deberá realizarse
un UNLOAD de los datos con la variable de entorno DECNEG=1; a continuación,
realizar un LOAD sin la variable DECNEG, o con DECNEG=distinto de 1.
El número máximo de funciones de usuario definidas por módulo se aumenta de 100 (valor anterior) a 200. Asimismo, el número máximo de parámetros pasados en una función se aumenta de 20 a 40.
CTLCOMP: La opción «-p» (PACK) evita que se guarde un «string» duplicado de otro cargado previamente, con lo que se reduce el tamaño del programa compilado.
CTLINK: La opción «-lf» permite que la lista de todos los módulos a enlazar se le pase contenida en un fichero. Ejemplo:
ctlink ... -lf filename ..
CTL: Permite la opción «-d» con el valor «» para que no se abra la base de datos especificada como directiva para el compilador (database «dbname» especificada antes del main).
Ha sido modificado para que cuando se ejecute una frase a un fichero lo haga siempre en modo columna, cada fila en una línea, aunque ocupe más de 80 caracteres.
A partir de esta versión, el mensaje que aparece cuando se produce un error en ejecución contendrá el módulo y la línea donde se ha localizado el mismo, siempre y cuando el módulo haya sido compilad con la opción «-g».
El número máximo de variables de mailing se ha aumentado de 100 a 200. Además, se permite que una línea continúe con la siguiente (y así sucesivamente hasta un máximo de 512 cacacteres) si termina con el carácter «\».
a) Cambios en la estructura de las tablas del Entorno:
La columna «comment» de la tabla «ep_d_comm» ha
sido renombrada como «commen_t».
La columna «description» de la tabla «ep_col_descr» definida
como tipo de dato: char(256), pasa a ser: char(255).
Estos cambios serán realizados automáticamente por el Entorno
de Programación en el momento de seleccionar una Base de Datos generada
con una versión anterior.
b) Nueva opción: Modificar Diccionario:
Cada módulo o programa del Entorno de Programación guarda como parte de su información el directorio donde se encuentra. En caso de querer modificar el directorio para un conjunto de módulos y programas utilizaremos la opción «Modificar Diccionario», la cual asignará el nuevo directorio sin mover los ficheros.