Ocasionalmente nos encontramos con situaciones que requieren que tengamos que manipular datos de la base de datos relacional de Absys, y nos encontremos con que estas funciones no estén contempladas de manera estándar por la aplicación, tales como borrado de históricos, modificaciones masivas en un determinado campo, etc... En principio este tipo de acciones pueden ser realizadas en la base de datos relacional a través de los interfaces que nos proporcionan los gestores de bases de datos que utilicemos según cada caso (Sql Server, Oracle...), pero es además frecuente que algunas de estas acciones requieran ser realizadas con una cierta frecuencia, lo que provoca mayor dependencia de la deseable del personal informático.
Con el propósito de poder almacenar estas sentencias SQL y aplicarlas utilizando valores variables por el Administrador de Absys se incluye el módulo de "ejecución de sentencias SQL" en el cliente de la aplicación, que nos permite mantener almacenadas sentencias de esta naturaleza con valores para los datos y para las condiciones de ejecución fijos o variables, y ejecutarlas siempre que estimemos necesario sin necesidad de que intervenga un especialista en lenguaje SQL más que en la realización de la primera consulta.
Nota: Antes de ejecutar alguna de las sentencias SQL haga una copia de las tablas que se van a ver afectadas puesto que una vez ejecutada la sentencia no se podrá deshacer. Puede exportar las tablas de una forma fácil desde la opción Administración - Exportación de tablas.
Cada una de estas sentencias se almacena en un fichero en la carpeta ABSQL de nuestra instalación de Absys y podemos añadir / modificar /eliminarlos con gran sencillez a través de la opción de "Edición de ficheros" de nuestro cliente Absys. Estos fichero se pueden leer, modificar y ejecutar desde el cliente. La única restricción para acceder a estos fichero es que el usuario debe ser un usuario administrador de Absys.
Pongamos un ejemplo. Supongamos que en nuestra biblioteca mantenemos dos tipos de lectores, adultos e infantiles y que trimestralmente decidimos que todos los lectores infantiles que hayan cumplido 16 años pasen al tipo de lector adulto.
En realidad lo que pretendemos es realizar una modificación masiva de datos en base a un criterio de búsqueda. En este caso, que la fecha de nacimiento sea anterior a una determinada que será variable en función del momento en que ejecutemos la sentencia.
Esto se podría resolver ejecutando desde el propio intefaz de la base de datos relacional la sentencia:
update lector set lecolp='ADU' where lefnac>='01/09/1988' and lecolp='INF'
El problema reside en que no queremos depender del personal informático para cada vez que tengamos que realizar una actualización de este tipo. Para solventar esta situación Absys nos ofrece la posibilidad de mantener esta sentencia en un fichero, con los valores tipo de lector y fecha de nacimiento como variables para poder aplicar los que deseemos en cada momento.
Para crear este fichero podemos acceder a través
del menú de Administración, Labores de
Administración, Edición de ficheros, a la
carpeta Sentencias SQL, y desde aquí emplear el
editor para añadir un nuevo fichero que contenga
la sentencia deseada y sus valores. Esto lo podemos
hacer basándonos si así lo deseamos en
alguno de los ficheros existentes que nos sirva de
guía para realizar nuestra nueva entrada. Basta
con marcar el fichero que nos interese y hacer clic en
añadir
.
Una vez en el editor de ficheros vamos a detallar las entradas y posibilidades que se nos ofrecen, basándonos en el ejemplo planteado.
Añadiremos el fichero exec020.sqa que será el encargado de ejecutar nuestra modificación. Este fichero deberá tener definidos los siguientes valores:
#DESC=[Descripción de la sentencia (texto que veremos en el cliente Absys)]
DESC= Cambio de lectores infantiles a adultos
#NPAR= [Número de variables que intervendrán en el proceso]
NPAR=3
#PAR1= [Frase introductoria de la variable 1]
PAR1= Fecha de nacimiento posterior a
#AYUPAR1= [Texto de ayuda para la variable 1]
AYUPAR1= Introduzca la fecha con la estructura DD/MM/AAAA
#PAR2= [Frase introductoria de la variable 2]
PAR2= Código de lector actual
#AYUPAR2= [Texto de ayuda para la variable 2]
AYUPAR2= Introduzca el actual código de los lectores a modificar
#PAR3=[Frase introductoria de la variable 3]
PAR3= Nuevo código de tipo de lector
#AYUPAR3= [Texto de ayuda para la variable 3]
AYUPAR3= Introduzca el código del nuevo tipo de lector
#SQA=[Entre llaves con retornos de carro, se introduce la sentencia SQL
incluyendo los valores variables con el identificador propio de cada uno de ellos.]
SQLA={
update lector set lecolp='[PAR3]' where lecolp='[PAR2]' and lefnac >= '[PAR1]'
}
Con esto nuestro fichero queda presto para ser ejecutado cuantas veces sea necesario. Para ello no tenemos más que acceder a Ejecución de sentencias SQL a través de las opciones Administración, Labores de Administración, seleccionar la acción que nos interesa, introducir los valores adecuados y ejecutar.
Podemos observar como a medida que vamos introduciendo los valores, en la parte inferior de la pantalla se va construyendo la sentencia SQL con la inclusión de los mismos.
Nuestra sentencia SQL ya está lista para ser ejecutada, aceptamos y Absys nos indicará los resultados de nuestra actualización.
1 Aconsejamos, que cuando sea posible, en lugar de modificar el fichero seleccionado, se cree uno nuevo para conservar siempre el fichero que enviamos por defecto y de esa manera ir añadiendo nuevos.
Manolo Lasala - mlasala@baratz.es