Manual SQL (PARTE 4)

  • por

<

div>

14. Omitir los Permisos de Ejecución

En entornos de bases de datos con permisos de seguridad para grupos de trabajo se puede utilizar la cláusula WITH OWNERACCESS OPTION para que el usuario actual adquiera los derechos de propietario a la hora de ejecutar la consulta. Su sintaxis es:
instrucción sql WITH OWNERACCESS OPTION
SELECT Apellido, Nombre, Salario FROM Empleados ORDER BY Apellido
WITH OWNERACCESS OPTION;
Esta opción requiere que esté declarado el acceso al fichero de grupo de trabajo (generalmente system.mda ó system .mdw) de la base de datos actual.

15. La Cláusula PROCEDURE

Esta cláusula es poco usual y se utiliza para crear una consulta a la misma vez que se ejecuta, opcionalmente define los parámetros de la misma. Su sintaxis es la siguiente:
PROCEDURE NombreConsulta Parámetro1 tipo1, …. , ParámetroN tipon ConsultaSQL
En donde:

Parte

Descripción

NombreConsulta

Es el nombre con se guardará la consulta en la base de datos.

Parámetro

Es el nombre de parámetro o de los parámetros de dicha consulta.

tipo

Es el tipo de datos del parámetro

ConsultaSQL

Es la consulta que se desea grabar y ejecutar.

PROCEDURE Lista_Categorias; SELECT DISTINCTROW Nombre_Categoria,
ID_Categoría FROM Categorias ORDER BY Nombre_Categoria;
Asigna el nombre Lista_de_categorías a la consulta y la ejecuta.
PROCEDURE Resumen Fecha_Inicio DateTime, Fecha_Final DateTime; SELECT
DISTINCTROW Fecha_Envio, ID_Pedido, Importe_Pedido, Format(Fecha_Envio, “yyyy”)
AS Año FROM Pedidos WHERE Fecha_Envio Between Fecha_Inicio And Fecha_Final;
Asigna el nombre Resumen a la consulta e incluye dos parámetros.

16. Anexos

Resolución de Problemas
Buscar Información duplicada en un campo de una tabla.
Para generar este tipo de consultas lo más sencillo es utilizar el asistente de consultas de Access, editar la sentencia SQL de la consulta y pegarla en nuestro código. No obstante este tipo de consulta se consigue de la siguiente forma:
SELECT DISTINCTROW Lista de Campos a Visualizar FROM Tabla
WHERE CampoDeBusqueda In (SELECT CampoDeBusqueda FROM Tabla As psudónimo
GROUP BY CampoDeBusqueda HAVING Count()>1 ) ORDER BY CampoDeBusqueda;
Un caso práctico, si deseamos localizar aquellos empleados con igual nombre y visualizar su código correspondiente, la consulta sería la siguiente:
SELECT DISTINCTROW Empleados.Nombre, Empleados.IdEmpleado
FROM Empleados WHERE Empleados.Nombre In (SELECT Nombre FROM
Empleados As Tmp GROUP BY Nombre HAVING Count(
)>1)
ORDER BY Empleados.Nombre;
Recuperar Registros de una tabla que no contengan registros relacionados en otra.
Este tipo de consulta se emplea en situaciones tales como saber que productos no se han vendido en un determinado periodo de tiempo,
SELECT DISTINCTROW Productos.IdProducto, Productos.Nombre FROM Productos
LEFT JOIN Pedidos ON Productos.IdProducto = Pedidos.IdProduct WHERE
(Pedidos.IdProducto Is Null) AND (Pedidos.Fecha Between #01-01-98# And #01-30-98#);
La sintaxis es sencilla, se trata de realizar una unión interna entre dos tablas seleccionadas mediante un LEFT JOIN, establecimiendo como condición que el campo relacionado de la segunda sea Null.

Utlizar SQL desde Visual Basic
Existen dos tipos de consultas SQL: las consultas de selección (nos devuelven datos) y las consultas de acción (aquellas que no devuelven ningún registro). Ambas pueden ser tratadas en Visual Basic pero de forma diferente.
Las consultas de selección se ejecutan recogiendo la información en un recordset previamente definido mediante la instrucción openrecordset(), por ejemplo:
Dim SQL as String
Dim RS as recordset
SQL = “SELECT * FROM Empleados;”
Set RS=MiBaseDatos.OpenRecordSet(SQL)
Si la consula de selección se encuentra almacenada en una consulta de la base de datos:
Set RS=MiBaseDatos.OpenRecordset(“MiConsulta”)
Las consultas de acción, al no devolver ningún registro, no las podemos asignar a ningún recordset, en este caso la forma de ejecutarlas es mediante los métodos Execute y ExecuteSQL (para bases de datos ODBC), por ejemplo:
Dim SQL as string
SQL = “DELETE * FROM Empleados WHERE Categoria = ‘Ordenanza’;”
MiBaseDatos.Execute SQL
Funciones de Visual Basic utilizables en una Instrucción SQL

Función

Sintaxis

Descripción

Now

Variable= Now

Devuelve la fecha y la hora actual del sistema

Date

Variable=Date

Devuelve la fecha actual del sistema

Time

Variable=Time

Devuelve la hora actual del sistema

Year

Variable=Year(Fecha)

Devuelve los cuatro dígitos correspondientes al año de Fecha

Month

Variable=Month(Fecha)

Devuelve el número del mes del parámetro fecha.

Day

Variable=Day(Fecha)

Devuelve el número del día del mes del parámetro fecha.

Weekday

Variable=Weekday(Fecha)

Devuelve un número entero que representa el día de la semana del parámetro fecha.

Hour

Variable=Hour(Hora)

Devuelve un número entre 0 y 23 que representa la hora del parámetro Hora.

Minute

Variable=Minute(Hora)

Devuelve un número entre 0 y 59 que representa los minutos del parámetro hora.

Second

Variable=Second(Hora)

Devuelve un número entre 0 y 59 que representa los segundos del parámetro hora.

DatePart
Esta función devuelve una parte señalada de una fecha concreta. Su sintaxis es:
DatePart(Parte, Fecha, ComienzoSemana, ComienzoAño)
Parte representa a la porción de fecha que se desea obtener, los posibles valores son:

Valor

Descripción

yyyy

Año

q

Trimestre

m

Mes

y

Día del año

d

Día del mes

w

Día de la semana

ww

Semana del año

h

Hora

m

Minutos

s

Segundos

ComienzoSemana indica el primer día de la semana. Los posibles valores son:

Valor

Descripción

0

Utiliza el valor pode efecto del sistema

1

Domingo (Valor predeterminado)

2

Lunes

3

Martes

4

Miércoles

5

Jueves

6

Viernes

7

Sábado

ComienzoAño indica cual es la primera semana del año; los posibles valores son:

Valor

Descripción

0

Valor del sistema

1

Comienza el año el 1 de enero (valor predeterminado).

2

Empieza con la semana que tenga al memos cuatro días en el nuevo año.

3

Empieza con la semana que esté contenida completamente en el nuevo año.


Evaluar valores antes de ejecutar la Consuta.
Dentro de una sentencia SQL podemos emplear la función iif para indicar las condiciones de búsqueda. La sintaxis de la función iif es la siguiente:
iif(Expresion,Valor1,Valor2)
En donde Expresión es la sentencia que evaluamos; si Expresión es verdadera entonces se devuelve Valor1, si Expresión es falsa se devuelve Valor2.
SELECT * Total FROM Empleados WHERE Apellido =
iff(TX_Apellido.Text <> ”, TX_Apellido.Text, *) ;
Supongamos que en un formulario tenemos una casilla de texto llamanda TX_Apellido. Si cuando ejecutamos esta consulta la casilla contiene algún valor se devuelven todos los empleados cuyo apellido coincida con el texto de la casilla, en caso contrario se devuelven todos los empleados.
SELECT Fecha, Producto, Cantidad, (iif(CodigoPostal>=28000 And
CodigoPostal <=28999,’Madrid’,’Nacional’)) AS Destino FROM Pedidos;
Esta consulta devuelve los campos Fecha, Nombre del Producto y Cantidad de la tabla pedidos, añadiendo un campo al final con el valor Madrid si el código posta está dentro del intervalo, en caso contario devuelve Nacional.

Un Pequeño Manual de Estilo
Siempre es bueno intentar hacer las cosas de igual modo para que el mantenimiento y la revisión nos sea una labor lo más sencilla posible. En lo que a mi respecta utilizo las siguiente normas a la hora de elaborar sentecias SQL:

  1. Las cláusulas siempre las escribo con Mayúsculas.
  2. Los operadores lógicos de sentencias siempre con Mayúsculas.
  3. Las operaciones siempre la primera letra con mayúsculas y el resto en minúsculas.
  4. Los operadores lógicos incluidos en otros operadores la primera letra con mayúsculas y el resto con minúculas.

Los Nombres de las Tablas, Campos y Consultas, los escribo siempre la primera letra con mayúsculas y el resto con minúsculas, en algunos casos utilizo el carácter “_” para definir mejor el nombre: Detalles_Pedidos.
Aunque con el motor Jet se pueden utilizar acentos y espacios en blanco para nombrar los campos, las tablas y las consultas no los utilizo porque cuando se exportar tablas a otros sistemas los acentos y los espacios en blanco pueden producir errores innecesarios.
Recuerda siempre que si utilizas espacios en blanco para llamar tablas o consultas cada vez que hagas referencias a ellos en una consulta debes incluir sus nombres entre corchetes.
SELECT [ID de Pedido], [Nombre del Producto], Cantidad FROM [Detalles del Pedido];

Facebook: https://www.facebook.com/EIMafias/

Twitter:@ElMafiasdelTuit

Instagram: https://www.instagram.com/paramissuperioresoficial/

Twitch: https://www.twitch.tv/eimafias/



Etiquetas:

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.