Professional Documents
Culture Documents
Implementacin de Triggers 17 atributo del Ejemplar que marcar 1 si el ejemplar est prestado marcar 2, si el ejemplar est disponible. Cuando el ejemplar de un libro es entregado en calidad de prstamo, el atributo disponibilidad pasar a prestado; es decir, cambiar de 1 a 2. Cuando el ejemplar es devuelto por el lector, el atributo cambiar nuevamente a disponible; esto es, ser modificado de 2 a 1. La solicitud del Ejemplar de un Libro se lleva a cabo a travs de la Ficha de Prstamo en la cul se consignarn los siguientes datos: fecha de prstamo del Libro, DNI del Lector, Tipo de prstamo (1: Lectura en sala / 2. Lectura a domicilio), fecha a devolver el ejemplar, fecha de devolucin (al ingresar el prstamo del ejemplar, estar en blanco y se cargar en el registro de devolucin), Estado del Libro (Se cargar en el registro de devolucin y ser: 1. Buen estado, 2. Manchado, 3. Roto, 4. Perdido). Cuando un nuevo prstamo se inserte en la tabla de prstamos haremos los siguientes controles: o Verificar el estado del lector para saber si est autorizado. o Verificar el estado del Libro para saber si est disponible o Actualizar el atributo disponibilidad del ejemplar, que pasar de disponible a prestado. Cuando un ejemplar ha sido devuelto, Actualizaremos la tabla de prstamos y llevaremos a cabo los siguientes controles: o Verificar que la fecha a devolver sea menor o igual a la fecha de devolucin del libro. Si no es asi, aplicar una sancin y actualizar el estado del lector teniendo en cuenta que su nuevo valor ser: 3. Lector amonestado hasta nuevo aviso. o Verificar el estado del Libro y compararlo con el estado del ejemplar; si no coinciden; aplicar una sancin, y actualizar el estado del Lector segn sea el caso. o Actualizar el atributo disponibilidad del ejemplar, que pasar de 1. Prestado a su nuevo valor 2. Disponible.
Elaborar el modelado de datos normalizado del caso descrito, teniendo en cuenta que habr una tabla donde se registrar el movimiento de libros, la misma que operar de la siguiente manera: a) Al Insertar un nuevo prstamo de Libro se disparar un Trigger que controle los casos descritos, en consecuencia; se desarrollar un trigger FOR Insert. b) Al Actualizar la devolucin de un Libro prestado, se disparar un Trigger que controle los casos descritos, en consecuencia; se desarrollar un trigger FOR Update. El Modelado propuesto, es el siguiente:
Implementacin de Triggers 17
PASO 2: IMPLEMENTACION DE UN TRIGGER EN ERWIN TRIGGER PARA INSERCION EN LA TABLA MOVE_LIBROS (Registro de un nuevo Prstamo de Libro) Crearemos el trigger desde ERwin llamado InsertaPrestamos sobre la tabla MOVE_LIBROS para la operacin de INSERCION; de la siguiente manera: Hagamos click derecho sobre la tabla MOVE_LIBROS y elijamos la opcin trigger; asi:
Implementacin de Triggers 17
A continuacin veremos la ventana Triggers, aqu pulsemos el botn New y veremos la ventana: New trigger; entonces escribiremos el nombre del Trigger, asi:
Implementacin de Triggers 17
Ahora, pasaremos a la pestaa: Code y borraremos el cdigo hasta dejarlo como se indica a continuacin:
Implementacin de Triggers 17
Entonces escribiremos el siguiente cdigo Transact SQL: /* CREATE TRIGGER InsertaPrestamos ON MOVE_LIBROS FOR INSERT AS */ BEGIN SET NOCOUNT ON; DECLARE @estadoLector char(01) DECLARE @disponibilidad char(01) select @estadolector = (select LEC_estado from LECTORES L inner join inserted i on L.LEC_dni = i.LEC_dni) select @disponibilidad = (select EJE_disponibilidad from EJEMPLARES E inner join inserted i on E.EJE_numero = i.EJE_numero) if @disponibilidad = '1' AND @estadolector = '4' begin UPDATE EJEMPLARES SET EJE_disponibilidad = '2' FROM EJEMPLARES E inner join MOVE_LIBROS M on E.EJE_numero = M.EJE_numero Luis Boy Chavil
Implementacin de Triggers 17 UPDATE LECTORES SET LEC_estado='3' from LECTORES L inner join MOVE_LIBROS M on L.LEC_dni = M.LEC_dni end ELSE begin if @disponibilidad = 2 Begin RAISERROR('El Libro esta prestado', 10,1) ROLLBACK TRANSACTION End IF @estadolector = 1 Begin RAISERROR('El Lector tiene libro prestado fuera de fecha', 10,1) ROLLBACK TRANSACTION End IF @estadolector = 2 Begin RAISERROR('El Lector esta castigado', 10,1) ROLLBACK TRANSACTION End IF @estadolector = 3 Begin RAISERROR('El Lector tiene un libro prestado', 10,1) ROLLBACK TRANSACTION End end END GO TRIGGER PARA ACTUALIZAR LA TABLA MOVE_LIBROS (Registro de la Devolucin de Libros) Seguiremos los pasos antes sealados en ERwin hasta ver la siguiente ventana:
Implementacin de Triggers 17
Pasaremos a la pestaa Code y completaremos con el siguiente cdigo Transact SQL: /* CREATE TRIGGER devolucionPrestamos ON MOVE_LIBROS FOR UPDATE AS */ BEGIN SET NOCOUNT ON DECLARE @estadolibro char(01) DECLARE @fechaDevuelto datetime DECLARE @fechaDevolver datetime select @estadolibro = (select MOV_estadolibro from inserted) select @fechaDevuelto = (select MOV_estadolibro from inserted) select @fechaDevolver = (select MOV_estadolibro Luis Boy Chavil
Implementacin de Triggers 17 from inserted) IF(@estadolibro = 1) BEGIN UPDATE EJEMPLARES SET EJE_disponibilidad = '1' FROM inserted I inner join EJEMPLARES E on E.LIB_codigo = I.LIB_codigo and E.EJE_numero = I.EJE_numero IF(@fechaDevuelto <= @fechaDevolver) BEGIN UPDATE LECTORES SET LEC_estado='1' -- Habilitado FROM inserted I inner join LECTORES L on I.LEC_dni = L.LEC_dni END ELSE BEGIN UPDATE LECTORES SET LEC_estado='3' -- Inhabilitado FROM inserted I inner join LECTORES L on I.LEC_dni = L.LEC_dni END -- Actualiza el estado de los Ejemplares UPDATE EJEMPLARES SET EJE_estado=@estadoLibro FROM inserted I inner join EJEMPLARES E on E.LIB_codigo = I.LIB_codigo and E.EJE_numero = I.EJE_numero END ELSE --No est permitido devolver libros en mal estado BEGIN rollback transaction raiserror('Libro en mal estado', 10, 1) END END go PASO 3: IMPLEMENTACION DE LA BASE DE DATOS EN SQL SERVER 2005 A continuacin, pasaremos el modelo de datos desarrollado en ERwin a la Base de datos en SQL Server, de la siguiente manera: Ingresemos a ERwin y elijamos las siguientes opciones del Men Principal: Tools Forward Engineers/Schema generation .. Luis Boy Chavil
Implementacin de Triggers 17
Apliquemos click en el botn Preview y seleccionemos el cdigo Transact SQL generado, luego copie al portapapeles dicho cdigo, de la siguiente manera:
Implementacin de Triggers 17 Ahora, ingresemos a Microsoft SQL Server 2005 donde crearemos una nueva base de datos con el nombre BIBLIOTECA, asi:
Seleccionemos la opcin New Query del men auxiliar y pegaremos el cdigo Transact SQL del portapapeles, entonces la ventana quedar asi:
Implementacin de Triggers 17
En este punto podremos pulsar F5 y se ejecutar el cdigo Transact SQL. PASO 4: IMPLEMENTACION DE UNA APLICACIN INTEGRADORA EN VISUAL BASIC NET 2005 Ingresemos a Visual Basic Net 2005 Apliquemos en: Archivo Nuevo Proyecto Nombre del Proyecto: WinProyecto Apliquemos en: Datos Agregar nuevo origen de datos Veremos la siguiente ventana:
Implementacin de Triggers 17
Apliquemos en el cono Base de datos y hagamos click en el botn Siguiente > La Conexin de datos se refiere a la base de datos: Biblioteca, creada en SQL Server. A continuacin, clickeamos en Siguiente >; para guardar la cadena de conexin. Veremos la siguiente ventana en la que elegiremos el check Tabla, asi:
Implementacin de Triggers 17
Ahora, pasaremos la informacin de cada tabla de datos a cada formulario de acuerdo a uno de los formatos siguientes, haciendo click en cada tabla; veamos:
Implementacin de Triggers 17
Haremos lo mismo en un nuevo formulario, por cada una de las tablas y listo; ya podremos disponer de los datos en formularios de la aplicacin.
Implementacin de Triggers 17
Implementacin de Triggers 17 Se mostrar el siguiente formulario en el que podremos disear el men para acceder a cada formulario donde haremos el ingreso de los datos de cada tabla.
Para enlazar cada opcin del men con cada formulario, haremos doble click sobre la opcin y escribiremos el nombre del formulario y el mtodo show; por ejemplo: Form1.show