jueves, 1 de noviembre de 2018

ACCESS II: Código del Módulo bas_Usuarios

Option Compare Database
Option Explicit

'---------------------------------------------------------------------
' Procedure : Get_Contraseña
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Obtiene la contraseña del usuario pasado como argumento.
'---------------------------------------------------------------------
'
Public Function Get_Contraseña(intUsuario As Integer) As String

Dim dbs As DAO.Database
Dim rst As DAO.Recordset

Dim strSQL As String

    strSQL = "SELECT dbo_Usuarios.Contraseña " & _
                "FROM dbo_Usuarios " & _
                "WHERE ID_Usuario = " & intUsuario & ";"

    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)

Dim strContraseña As String
   
    If rst.RecordCount <> 0 Then

        strContraseña = rst!Contraseña
   
    End If
   
    ' Devolvemos la contraseña
    Get_Contraseña = strContraseña
   
    ' Cerramos el recordset
    rst.Close
   
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing

End Function

'---------------------------------------------------------------------
' Procedure : Comprueba_Usuario
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Controla si se ha seleccionado un usuario del combobox
'             cbo_Usuario
'---------------------------------------------------------------------
'
Private Function Comprueba_Usuario() As Boolean

    If IsNull(Me.cbo_Usuario.Value) = True Then

        ' Realizamos mensaje sonoro
        Beep

        ' Mostramos mensaje en la etiqueta
        Call MensajeEtiqueta("Debe seleccionar un usuario.")

        ' Centramos el foco en el textbox
        Me.cbo_Usuario.SetFocus

        ' Devolvemos FALSE por que no hay ningún usuario
        ' seleccinado en el combobox...
        Comprueba_Usuario = False

    Else

        ' Devolvemos TRUE por que SI hay un usuario
        ' seleccionado en el combobox...
        Comprueba_Usuario = True

    End If

End Function


'---------------------------------------------------------------------
' Procedure : Comprueba_Contraseña
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Controla si se ha introducido una contraseña en el
'             textbox txt_Contraseña
'---------------------------------------------------------------------
'
Private Function Comprueba_Contraseña() As Boolean

Dim strContraseña As String

    strContraseña = Nz(Me.txt_Contraseña, "")

    If strContraseña = "" Then

        ' Realizamos mensaje sonoro
        Beep

        ' Mostramos mensaje en la etiqueta
        Call MensajeEtiqueta("Introduzca una contraseña.")

        ' Centramos el foco en el textbox de la contraseña
        Me.txt_Contraseña.SetFocus

        ' Devolvemos FALSE, por que no se ha introducido ninguna
        ' contraseña en el textbox...
        Comprueba_Contraseña = False

    Else

        ' Devolvemos TRUE, por que hay una contraseña introducida,
        ' sea erronea o no...
        Comprueba_Contraseña = True

    End If
   
End Function

ACCESS II: Código del Módulo bas_sesion

Option Compare Database

'---------------------------------------------------------------------
' Procedure : Log_Sesion
' Author : Witigo (Angel Campos Muñoz)
' Date : 22/09/2014
' Purpose : Inserta un registro en la tabla dbo_logs_sesion con los
' datos de la sesión de usuario
'---------------------------------------------------------------------
'
Public Function Log_Sesion(intUsuario As Integer, _
                           strResultado As String, _
                           Optional strContraseña As String = "")




   Set dbs = CurrentDb()
   Set rst = dbs.OpenRecordset("dbo_logs_sesion")

   With rst

      ' Agregamos un registro
      .AddNew

      ' Especificamos los campos en los que vamos a insertar
      ' los datos relativos a la sesión de usuario.
      .Fields("Fecha").Value = Now()
      .Fields("Terminal").Value = Environ("Computername")
      .Fields("ID_Usuario").Value = intUsuario
      .Fields("Resultado").Value = strResultado
      .Fields("ContraseñaErronea").Value = strContraseña

      ' Actualizamos el registro
      .Update

   End With

   ' Cerramos el recordset
   rst.Close

   ' Borramos los objetos
   Set rst = Nothing
   Set dbs = Nothing

End Function

ACCESS II: Código del Módulo bas_seguridad_Sesion

Option Compare Database
Option Explicit

' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte
Public Sub Block_Usuario(intUsuario As Integer)

Dim dbs As DAO.Database
Dim rst As DAO.Recordset

Dim strSQL As String

    strSQL = "SELECT dbo_Usuarios.Activo " & _
                "FROM dbo_Usuarios " & _
                "WHERE ID_Usuario = " & intUsuario & ";"
               
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)

    With rst
       
        ' Modificamos el registro
        .Edit

        .Fields("Activo").Value = False

        ' Actualizamos el registro
        .Update
   
    End With
   
    ' Cerramos el recordset
    rst.Close
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing

End Sub

'Purpose   : Devuelve el número máximo de intentos fallidos de iniciar
'             sesión en la aplicación.
'-------------------------------------------------------------------------
'
Public Function Get_ErrMaxLogin() As Byte

Dim dbs As DAO.Database
Dim rst As DAO.Recordset

Dim strSQL As String

    strSQL = "SELECT dbo_Opciones.ID_Opcion, " & _
                    "dbo_Opciones.ErrMaxLogin " & _
                "FROM dbo_Opciones " & _
                "WHERE (((dbo_Opciones.ID_Opcion) = 1));"
               
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
   
    With rst
   
        ' Devolvemos 0 por que no hay registros
        If .RecordCount = 0 Then Get_ErrMaxLogin = 0
       
        ' Devolvemos el número máximo de intentos
        Get_ErrMaxLogin = !ErrMaxLogin
   
    End With
   
    ' Cerramos el recordset
    rst.Close
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing

End Function
'Procedure:  Comprueba_Intentos
' Purpose   : Comprueba los intentos de inicio de sesión fallidos y actúa
'             en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
                                intUsuario As Integer)

    If bytErrLogin = Get_ErrMaxLogin Then

        ' Mostramos el mensaje "Se ha superado el número máximo de intentos
        ' de inicio de sesión"
        MsgBox "Se ha superado el número máximo de intentos de " & _
                "inicio de sesión." & _
                vbCrLf & vbCrLf & _
                "Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
                vbCrLf & vbCrLf & _
                "El usuario ha sido bloqueado.", _
                vbExclamation, "Inicio de sesión"
           
        ' Bloqueamos al usuario
        Call Block_Usuario(intUsuario)
           
        ' Hacemos log del bloqueo del usuario
        Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
       
        With Me
       
            ' Actualizamos el combobox cbo_Usuario
            .cbo_Usuario.Requery
               
            ' Borramos la contraseña
            .txt_Contraseña = ""
               
            ' Ocultamos la etiqueta
            .lbl_Mensaje.Visible = False
     
        End With
     
    End If
           
End Sub

ACCESS II: Código del Formulario Form_Login

Option Compare Database
Option Explicit

' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte

'Procedure:  Comprueba_Intentos
' Purpose   : Comprueba los intentos de inicio de sesión fallidos y actúa
'             en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
                                intUsuario As Integer)

    If bytErrLogin = Get_ErrMaxLogin Then

        ' Mostramos el mensaje "Se ha superado el número máximo de intentos
        ' de inicio de sesión"
        MsgBox "Se ha superado el número máximo de intentos de " & _
                "inicio de sesión." & _
                vbCrLf & vbCrLf & _
                "Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
                vbCrLf & vbCrLf & _
                "El usuario ha sido bloqueado.", _
                vbExclamation, "Inicio de sesión"
           
        ' Bloqueamos al usuario
        Call Block_Usuario(intUsuario)
           
        ' Hacemos log del bloqueo del usuario
        Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
       
        With Me
       
            ' Actualizamos el combobox cbo_Usuario
            .cbo_Usuario.Requery
               
            ' Borramos la contraseña
            .txt_Contraseña = ""
               
            ' Ocultamos la etiqueta
            .lbl_Mensaje.Visible = False
     
        End With
     
    End If
           
End Sub

Private Sub cmd_Login_Click()
Dim intUsuario As Integer
Dim strContraseña As String

    intUsuario = Nz(Me.cbo_Usuario.Value, 0)
   
   
    ' Ocultamos la etiqueta
    If Me.lbl_Mensaje.Visible = True Then Me.lbl_Mensaje.Visible = False
   
    ' Comprobamos si se ha seleccionado usuario


    ' Comprobamos si se ha introducido contraseña


    ' Comprobamos el valor introducido para el usuario y su contraseña
 

        ' -------------------------------------------------------
        ' Aquí podemos insertar el código que queremos que se
        ' ejecute cuando iniciemos la sesión...
        ' -------------------------------------------------------
           
        ' Mostramos mensaje
        MsgBox "Sesión de usuario iniciada", _
                vbInformation, _
                "Inicio de Sesión"

        ' Hacemos log del inicio de sesión
        Log_Sesion intUsuario, "Inicio de sesión."

        ' Cerramos el formulario
        DoCmd.Close acForm, Me.Name
           
   
       
        ' Añadimos +1 a los intentos de login erróneos
1
       
        ' Centramos el foco en el textbox
       

        ' Mostramos mensaje en la etiqueta
        Call MensajeEtiqueta("La contraseña introducida es errónea.")
       
        ' Hacemos log del inicio de sesión fallido
        Call Log_Sesion(intUsuario, "Inicio de sesión erróneo.", strContraseña)

        ' Comprobamos los intentos de inicio de sesión
       
   
   
End Sub
Private Sub MensajeEtiqueta(strMensaje As String)

Dim lbl As Label

    Set lbl = Me.lbl_Mensaje
   
    If Nz(strMensaje, "") <> "" Then

        ' Mostramos mensaje
        With lbl
               
            ' Hacemos visible la etiqueta
            .Visible = True
            ' Mostramos el Mensaje de aviso
            .Caption = strMensaje
               
        End With
   
    End If
   
    ' Borramos el objeto
    Set lbl = Nothing
   
End Sub

 Private Sub Cmd_Salir_Click()
  ' Cerramos el Formulario
 DoCmd.Close acForm, Me.Name
   
    End Sub
Private Sub Form_Load()
    ' Establecemos el valor de la variable que controla los
    ' errores de login...
    bytErrLogin = 0

End Sub

ACCESS II: Login Completo Final














 

 

CÓDIGO bas_seguridad_sesión

Option Compare Database
Option Explicit
 
' Variable privada que controla los intentos de login fallidos
Private bytErrLogin As Byte
Public Sub Block_Usuario(intUsuario As Integer)
 
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
 
Dim strSQL As String
 
    strSQL = "SELECT dbo_Usuarios.Activo " & _
                "FROM dbo_Usuarios " & _
                "WHERE ID_Usuario = " & intUsuario & ";"
                
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
 
    With rst
        
        ' Modificamos el registro
        .Edit
 
        .Fields("Activo").Value = False
 
        ' Actualizamos el registro
        .Update
    
    End With
    
    ' Cerramos el recordset
    rst.Close
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing
 
End Sub
 
'Purpose   : Devuelve el número máximo de intentos fallidos de iniciar
'             sesión en la aplicación.
'-------------------------------------------------------------------------
'
Public Function Get_ErrMaxLogin() As Byte
 
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
 
Dim strSQL As String
 
    strSQL = "SELECT dbo_Opciones.ID_Opcion, " & _
                    "dbo_Opciones.ErrMaxLogin " & _
                "FROM dbo_Opciones " & _
                "WHERE (((dbo_Opciones.ID_Opcion) = 1));"
                
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
    
    With rst
    
        ' Devolvemos 0 por que no hay registros
        If .RecordCount = 0 Then Get_ErrMaxLogin = 0
        
        ' Devolvemos el número máximo de intentos
        Get_ErrMaxLogin = !ErrMaxLogin
    
    End With
    
    ' Cerramos el recordset
    rst.Close
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing
 
End Function
'Procedure:  Comprueba_Intentos
' Purpose   : Comprueba los intentos de inicio de sesión fallidos y actúa
'             en consecuencia.
'-------------------------------------------------------------------------
'
Private Sub Comprueba_Intentos(bytErrLogin As Byte, _
                                intUsuario As Integer)
 
    If bytErrLogin = Get_ErrMaxLogin Then
 
        ' Mostramos el mensaje "Se ha superado el número máximo de intentos
        ' de inicio de sesión"
        MsgBox "Se ha superado el número máximo de intentos de " & _
                "inicio de sesión." & _
                vbCrLf & vbCrLf & _
                "Usuario : """ & Me.cbo_Usuario.Column(1) & """." & _
                vbCrLf & vbCrLf & _
                "El usuario ha sido bloqueado.", _
                vbExclamation, "Inicio de sesión"
            
        ' Bloqueamos al usuario
        Call Block_Usuario(intUsuario)
            
        ' Hacemos log del bloqueo del usuario
        Call Log_Sesion(intUsuario, "El usuario ha sido bloqueado.")
        
        With Me
        
            ' Actualizamos el combobox cbo_Usuario
            .cbo_Usuario.Requery
                
            ' Borramos la contraseña
            .txt_Contraseña = ""
                
            ' Ocultamos la etiqueta
            .lbl_Mensaje.Visible = False
      
        End With
      
    End If
            
End Sub
 
 

CÓDIGO bas_sesión

 

Option Compare Database

'---------------------------------------------------------------------
' Procedure : Log_Sesion
' Author : Witigo (Angel Campos Muñoz)
' Date : 22/09/2014
' Purpose : Inserta un registro en la tabla dbo_logs_sesion con los
' datos de la sesión de usuario
'---------------------------------------------------------------------
'
Public Function Log_Sesion(intUsuario As Integer, _
                           strResultado As String, _
                           Optional strContraseña As String = "")
 


 
   Set dbs = CurrentDb()
   Set rst = dbs.OpenRecordset("dbo_logs_sesion")
 
   With rst
 
      ' Agregamos un registro
      .AddNew
 
      ' Especificamos los campos en los que vamos a insertar
      ' los datos relativos a la sesión de usuario.
      .Fields("Fecha").Value = Now()
      .Fields("Terminal").Value = Environ("Computername")
      .Fields("ID_Usuario").Value = intUsuario
      .Fields("Resultado").Value = strResultado
      .Fields("ContraseñaErronea").Value = strContraseña
 
      ' Actualizamos el registro
      .Update
 
   End With
 
   ' Cerramos el recordset
   rst.Close
 
   ' Borramos los objetos
   Set rst = Nothing
   Set dbs = Nothing
 
End Function



CÓDIGO bas_usuarios

 

Option Compare Database
Option Explicit
 
'---------------------------------------------------------------------
' Procedure : Get_Contraseña
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Obtiene la contraseña del usuario pasado como argumento.
'---------------------------------------------------------------------
'
Public Function Get_Contraseña(intUsuario As Integer) As String
 
Dim dbs As DAO.Database
Dim rst As DAO.Recordset
 
Dim strSQL As String
 
    strSQL = "SELECT dbo_Usuarios.Contraseña " & _
                "FROM dbo_Usuarios " & _
                "WHERE ID_Usuario = " & intUsuario & ";"
 
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(strSQL, dbOpenDynaset)
 
Dim strContraseña As String
    
    If rst.RecordCount <> 0 Then
 
        strContraseña = rst!Contraseña
    
    End If
    
    ' Devolvemos la contraseña
    Get_Contraseña = strContraseña
    
    ' Cerramos el recordset
    rst.Close
    
    ' Borramos los objetos
    Set rst = Nothing
    Set dbs = Nothing
 
End Function

'---------------------------------------------------------------------
' Procedure : Comprueba_Usuario
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Controla si se ha seleccionado un usuario del combobox
'             cbo_Usuario
'---------------------------------------------------------------------
'
Private Function Comprueba_Usuario() As Boolean
 
    If IsNull(Me.cbo_Usuario.Value) = True Then
 
        ' Realizamos mensaje sonoro
        Beep
 
        ' Mostramos mensaje en la etiqueta
        Call MensajeEtiqueta("Debe seleccionar un usuario.")
 
        ' Centramos el foco en el textbox
        Me.cbo_Usuario.SetFocus
 
        ' Devolvemos FALSE por que no hay ningún usuario
        ' seleccinado en el combobox...
        Comprueba_Usuario = False
 
    Else
 
        ' Devolvemos TRUE por que SI hay un usuario
        ' seleccionado en el combobox...
        Comprueba_Usuario = True
 
    End If
 
End Function
 

'---------------------------------------------------------------------
' Procedure : Comprueba_Contraseña
' Author    : Witigo (Angel Campos Muñoz)
' Date      : 22/09/2014
' Purpose   : Controla si se ha introducido una contraseña en el
'             textbox txt_Contraseña
'---------------------------------------------------------------------
'
Private Function Comprueba_Contraseña() As Boolean
 
Dim strContraseña As String
 
    strContraseña = Nz(Me.txt_Contraseña, "")
 
    If strContraseña = "" Then
 
        ' Realizamos mensaje sonoro
        Beep
 
        ' Mostramos mensaje en la etiqueta
        Call MensajeEtiqueta("Introduzca una contraseña.")
 
        ' Centramos el foco en el textbox de la contraseña
        Me.txt_Contraseña.SetFocus
 
        ' Devolvemos FALSE, por que no se ha introducido ninguna
        ' contraseña en el textbox...
        Comprueba_Contraseña = False
 
    Else
 
        ' Devolvemos TRUE, por que hay una contraseña introducida,
        ' sea erronea o no...
        Comprueba_Contraseña = True
 
    End If
    
End Function
 

 

ACCESS II: Introducción Teoría

Access SQL: conceptos básicos, vocabulario y sintaxis
SQL (por sus siglas en inglés Structured Query Language; en español lenguaje de consulta estructurada)

¿Qué es SQL?

Al trabajar con conjuntos de datos y las relaciones entre ellos. Los programas de bases de datos relacionales, como Microsoft Office Access, usan SQL para trabajar con datos. A diferencia de muchos lenguajes de computación, SQL no es difícil de leer y entender, incluso para un usuario inexperto. Al igual que muchos lenguajes de computación, SQL es un estándar internacional reconocido por organismos de estándares como ISO y ANSI.SQL es un lenguaje de computación par
SQL se usa para describir conjuntos de datos que pueden ayudarle a responder preguntas. Al usar SQL, debe usar la sintaxis correcta. La sintaxis es el conjunto de reglas mediante las que se combinan correctamente los elementos de un idioma. La sintaxis SQL se basa en la sintaxis del idioma inglés y usa muchos de los mismos elementos que la sintaxis de Visual Basic para Aplicaciones (VBA).
Por ejemplo, una simple instrucción SQL que recupera una lista de los apellidos de contactos cuyo nombre es María podría ser similar a esto:
SELECT Last_Name
FROM Contacts WHERE First_Name = 'Mary';
Nota: SQL no se usa solo para manipular datos, sino también para crear y modificar el diseño de objetos de base de datos, como tablas. El elemento de SQL que se usa para crear y modificar objetos de base de datos se denomina lenguaje de definición de datos (DDL). Este tema no trata el DDL. Para obtener más información, vea el artículo Crear o modificar tablas o índices mediante una consulta de definición de datos.

Instrucciones SELECT

Para describir un conjunto de datos con SQL, se escribe una instrucción SELECT. Una instrucción SELECT contiene una descripción completa de un conjunto de datos que quiere obtener de una base de datos. Se incluye lo siguiente:
  • Qué tablas contienen los datos.
  • Cómo se relacionan los datos de orígenes diferentes.
  • Qué campos o cálculos proporcionarán los datos.
  • Criterios que los datos deben cumplir para ser incluidos.
  • Si se deben ordenar los datos y, en caso de ser así, cómo deben ordenarse.


Cláusulas SQL

Como una frase, una instrucción SQL tiene cláusulas. Cada cláusula realiza una función de la instrucción SQL. Algunas cláusulas son necesarias en una instrucción SELECT. En la siguiente tabla, se enumeran las cláusulas SQL más comunes.
Cláusula SQL
Función
Obligatorio
SELECT
Muestra una lista de los campos que contienen datos de interés.
FROM
Muestra las tablas que contienen los campos de la cláusula SELECT.
WHERE
Especifica los criterios de campo que cada registro debe cumplir para poder ser incluido en los resultados.
No
ORDER BY
Especifica la forma de ordenar los resultados.
No
GROUP BY
En una instrucción SQL que contiene funciones de agregado, muestra los campos que no se resumen en la cláusula SELECT.
Solo si están estos campos
HAVING
En una instrucción SQL que contiene funciones de agregado, especifica las condiciones que se aplican a los campos que se resumen en la instrucción SELECT.
No

Términos de SQL

Cada cláusula SQL se compone de términos, comparables a elementos de la oración. En la siguiente tabla, se enumeran los tipos de términos de SQL.
Término de SQL
Elemento de la oración comparable
Definición
Ejemplo
identificador
sustantivo
Nombre que se usa para identificar un objeto de la base de datos, como el nombre de un campo.
Clientes.[Número de teléfono]
operador
verbo o adverbio
Palabra clave que representa o modifica una acción.
AS
constante
sustantivo
Valor que no cambia, como un número o un valor nulo (NULL).
42
expresión
adjetivo
Combinación de identificadores, operadores, constantes y funciones que se evalúa como un valor único.
> = Productos.[Precio por unidad]

ACCESS II: (Creación de un Informe con 2 Condiciones)

PRÁCTICA ACCESS AVANZADO
CREACIÓN DE UN INFORME, LIGADO A UN FORMULARIO, CON DOS CONDICIONES.

Recupera una Base de Datos, Identifica una Tabla.
1) Crearemos un Formulario Personalizado, basado en una Tabla
  a) Diseño del Formulario, Insertamos dos Campos, en este caso (Código del Curso), (Nota Final), le ponemos nombre a las etiquetas.
Activamos la Hoja de Propiedades y le pondremos nombre a los cuadros de texto, Ejemplo (TxtCodCurso), (TxtNotaFinal), Guardar el Formulario.

2)Crear una Consulta Sencilla, Utilizando el asistente, seguir las Instrucciones, pasar todos los campos, Asignar nombre a la consulta, hasta llegar al punto donde dice: modificar el diseño de la consulta. Poner las condiciones a la consulta que son 2, guardar y probar que funcione.
3) Crear un informe, Utilizando el asistente, pasar todos los campos, y probar que funcione
4) Recuperar el formulario y poner un botón de acción que realice todo el proceso, hasta crear el informe.





ACCESS II: Práctica IV SQL


Ejercicios SQL access
1 EJERCICIOS SQL Crear en Access la base de datos Empresa_1 y ejecutar las sentencias SQL EMPLEADOS ID_EMPLEADO NOMBRE APELLIDOS F_NACIMIENTO SEXO CARGO SALARIO 1 Carlos Jiménez Clarín 1985/05/03 H Mozo 1500 2 Elena Rubio Cuestas 1978/09/25 M Secretaria 1300 3 José Calvo Sisman 1990/11/12 H Mozo 1400 4 Margarita Rodríguez Garcés 1992/05/16 M Secretaria 1325 SCRIPT:
• CREACIÓN TABLAS CREATE TABLE EMPLEADOS( id_empleado int primary Key NOT NULL, nombre char(50) NOT NULL, apellidos char(50) NOT NULL, f_nacimiento date NOT NULL, sexo char(1) NOT NULL, cargo char(50) NOT NULL, salario int NOT NULL );
• INSERCION DE DATOS TABLA EMPLEADO
 INSERT INTO EMPLEADOS (id_empleado, nombre, apellidos, f_nacimiento, sexo, cargo, salario) VALUES ('1','Carlos','Jiménez Clarín','1985/05/03','H','Mozo','1500');
INSERT INTO EMPLEADOS (id_empleado, nombre, apellidos, f_nacimiento, sexo, cargo, salario) VALUES ('2','Elena','Rubio Cuestas','1978/09/25','M','Secretaria','1300');
INSERT INTO EMPLEADOS (id_empleado, nombre, apellidos, f_nacimiento, sexo, cargo, salario) VALUES ('3','José','Calvo Sisman','1990/11/12','H','Mozo','1400');
INSERT INTO EMPLEADOS (id_empleado, nombre, apellidos, f_nacimiento, sexo, cargo, salario) VALUES ('4','Margarita','Rodríguez Garcés','1992/05/16','M','Secretaria','1325'); • Ejemplo 1 ¿Qué empleados tienen un salario mayor a 1350? select NOMBRE , APELLIDOS from EMPLEADOS where SALARIO > 1350
 • Ejemplo 2 ¿Realizar una consulta que devuelva el nombre, apellidos y la fecha de nacimiento de aquellos empleados que cobren más de 1350?
select NOMBRE , APELLIDOS , F_NACIMIENTO from EMPLEADOS where SALARIO > 1350
• Ejemplo 3 ¿Qué empleados tienen un sueldo comprendido entre 1350 y 1450?
 select NOMBRE , APELLIDOS from EMPLEADOS where SALARIO > 1350 and SALARIO <= 1450
• Ejemplo 4 ¿Qué empleados son hombres?
select NOMBRE , APELLIDOS from EMPLEADOS where SEXO = 'H'
 • Ejemplo 5 ¿Cuáles son los nombres de los empleados tienen el cargo de MOZO?
select NOMBRE from EMPLEADOS where CARGO = 'MOZO'
• Ejemplo 6 ¿Cuál es el empleado de código 4?
 select APELLIDOS from EMPLEADOS where ID_EMPLEADO = 4
Crear en Access la siguiente bases de Datos y Ejecutar las sentencias SQL DEPARTAMENTO cod_dep nombre_dep localización 10 Desarrollo de Software El Coyolar 20 Análisis de Sistemas Guadalupe 30 Contabilidad Subtiava 40 Ventas San Felipe EMPLEADO cod_emp nombre edad oficio dir fecha_ing salario comisión cod_dep 1 Vargas Héctor 27 Vendedor León 12/05/1993 12000 40 2 Hernández Julio 27 Analista Chinandega 14/07/1982 13000 1500 20 3 Esquivel José 31 Director Juigalpa 05/06/1981 16700 1200 30 4 Delgado Carmen 37 Vendedor León 02/03/1983 13400 40 5 Castillo Luis 17 Vendedor Masaya 12/08/1982 16309 1000 40 6 Esquivel Alfonso 26 Presidente Nagarote 12/09/1981 15000 30 7 Pérez Luis 32 Empleado Managua 02/03/1980 16890 10 SCRIPT:
 CREACIÓN TABLAS CREATE TABLE DEPARTAMENTO( cod_dep int primary Key NOT NULL, nombre_dep char(50) NOT NULL, localización char (50) NOT NULL ); CREATE TABLE EMPLEADO( cod_emp int primary Key NOT NULL, nombre char(50) NOT NULL, edad int NOT NULL, oficio char(50) NOT NULL, dir char(50) NOT NULL, fecha_ing char(50) NOT NULL, salario int NOT NULL, comisión int, cod_dep int NOT NULL );
• INSERCION DE DATOS TABLA DEPARTAMENTO INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep, localización) VALUES ('10','Desarrollo de Software','El Coyolar');
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep, localización) VALUES ('20','Análisis de Sistemas','Guadalupe');
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep, localización) VALUES ('30','Contabilidad','Subtiava');
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep, localización) VALUES ('40','Ventas','San Felipe');
• INSERCION DE DATOS TABLA EMPLEADO
INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('1','Vargas Héctor','27','Vendedor','León','12/05/1993','12000',null,'40');
INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('2','Hernández Julio','27',' Analista',' Chinandega','14/07/1982','13000','1500','20');
 INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('3','Esquivel José','31','Director','Juigalpa','05/06/1981','16700','1200','30'); INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('4','Delgado Carmen','37','Vendedor','León','02/03/1983','13400',null,'40'); INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('5','Castillo Luis','17','Vendedor','Masaya','12/08/1982','16309','1000','40'); INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('6','Esquivel Alfonso','26','Presidente','Naragote','12/09/1981','15000',null,'30'); INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('7','Pérez Luis','32','Empleado','Managua','02/03/1980','16890',null,'10');
• Ejemplo 7 Listar los nombres de los empleados cuyo nombre termine con la letra ‘o’. select nombre from EMPLEADO where nombre like '*o'
• Ejemplo 8 Seleccionar el nombre, el oficio y salario de los empleados que trabajan en León. select nombre, oficio, salario from EMPLEADO where dir='León'
• Ejemplo 9 Calcular el salario medio de todos los empleados.
 select avg(salario) from EMPLEADO
• Ejemplo 10 ¿Cuál es el máximo salario de los empleados del departamento número 10?
select max(salario) from EMPLEADO where cod_dep = 10
• Ejemplo 11 ¿Cuántos empleados hay en el departamento número 10?
 select count(*) from EMPLEADO where cod_dep = 10
 • Ejemplo 12 ¿Cuántos empleados hay en el departamento de VENTAS? select count(*) from EMPLEADO where cod_dep=40
• Ejemplo 13 ¿Cuántos empleados no tienen comisión?
select count(*) from EMPLEADO where comisión is null
• Ejemplo 14 Se desea saber cuántos nombres de los empleados empiezan por la letra ‘A’.
select count(*) from EMPLEADO where nombre like 'E*'
• Ejemplo 15 Para cada oficio obtener la suma de salarios.
 select oficio, sum(salario) from EMPLEADO group by oficio
• Ejemplo 16 Mostrar los datos de los empleados cuyo salario sea mayor que la media de todos los salarios.
 select * from EMPLEADO where salario>(select avg(salario) from EMPLEADO)
• Ejemplo 17 Seleccionar el nombre del empleado que tiene máximo salario.
 select nombre from EMPLEADO where salario=(select max(salario)from EMPLEADO)
• Ejemplo 18 Mostrar el nombre del empleado que tiene el salario más bajo.
select nombre from EMPLEADO where salario=(select min(salario)from EMPLEADO)
• Ejemplo 19 Insertar en la tabla EMPLEADO un empleado con código 8, nombre ‘Cajas Carlos’ de 32 años, oficio Analista, vive en Matagalpa, fecha de ingreso en la empresa el 22-06-2001, su salario es de 15600, no tiene comisión y pertenece al departamento 20.
 INSERT INTO EMPLEADO (cod_emp, nombre, edad, oficio, dir, fecha_ing, salario, comisión, cod_dep) VALUES ('8','Cajas Carlos','32','Empleado','Matagalpa','22/06/2001','15600',null,'20');
• Ejemplo 20 Insertar en la tabla DEPARTAMENTO un departamento cuyo número sea 50, de nombre ‘GENERAL’ y cuya localización sea ‘Laborio’.
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep, localización) VALUES ('50','General','Laborio');
• Ejemplo 21 Insertar en la tabla DEPARTAMENTO un departamento cuyo número sea 60 y de nombre ‘PRUEBAS’ y cuya localización sea ‘Puerto Cayo’.
INSERT INTO DEPARTAMENTO (cod_dep, nombre_dep, localización) VALUES ('60','Pruebas','Puerto Cayo');
 • Ejemplo 22 Doblar el salario a todos los empleados del departamento 30.
update EMPLEADO set salario = salario*2 where cod_dep=30
 • Ejemplo 23 Cambiar todos los empleados del departamento número 30 al departamento número 20.
update EMPLEADO set cod_dep = 20 where cod_dep = 30
 • Ejemplo 24 Incrementar en un 10% el sueldo de los empleados del departamento 10.
 update EMPLEADO set salario=salario*1.1 where cod_dep=10
• Ejemplo 25 Cambiar la localidad del departamento número 10 a ‘Zaragoza’.
 update EMPLEADO set localizacion='Zaragoza' where cod_dep = 10
• Ejemplo 26 En la tabla DEPARTAMENTO borrar el departamento número 40.
 delete from DEPARTAMENTO where cod_dep = 40
• Ejemplo 27 En la tabla EMPLEADO borrar todos los empleados que sean del departamento 20. delete from EMPLEADO where cod_dep = 20