Sección de tutoriales y manuales vb

Guía Muy básica de SQL - Microsoft JET



 

 

Contenido - Indice:

 

 

 

Nota: Esta es una guía muy básica sobre el uso de Microsoft JET sql, por lo tanto se obvian muchos temas, para una información detallada, podés ojear la referencia en el archivo llamado JETSQL35.HLP que se instala con Visual Basic. También podés desde la siguiente página descargar otro manual de sql

 

 


1 - Instrucción Select

La instrucción SELECT permite obtener un conjunto de registros de una o varias tablas especificadas en la cláusula o sentencia SQL. SELECT no modifica datos en una base de datos, solo extrae información

Por ejemplo para seleccionar todos los campos de una tabla llamada Tabla1:

Dim consulta As String

consulta = "Select * From Tabla1"

Para seleccionar uno o varios campos específicos:

Dim consulta As String

consulta = "Select Campo1,Campo2 From Tabla1"

El siguiente ejemplo selecciona de una tabla llamada Clientes, todos los registros de los campos Localidad y Telefono. Luego muestra los datos en un control Datagrid. El ejemplo utiliza ADO y se conecta a una base de datos llamada BD1.mdb ubicada en la carpeta del programa.

Dim base As Connection, rst As Recordset, ruta As String

Set base = New Connection
Set rst = New Recordset

ruta = App.Path & "\bd1.mdb"

'Abrimos la base de datos
base.CursorLocation = adUseClient
base.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta

' Seleccionamos todos los valores de los campos Telefono y Localidad _
de la tabla Clientes


rst.Open "SELECT Telefono, Localidad FROM Clientes", base, adOpenStatic, adLockOptimistic

'Asignamos el recordset devuelto en un control Datagrid
Set DataGrid1.DataSource = rst

 

SELECT FROM en varias tablas

Para consultar a mas de una tabla se antepone el nombre de la tabla, y luego se referencia el campo mediante un punto, por ejemplo:

"SELECT Clientes.nombre, Productos.Nombre FROM clientes, Productos WHERE Clientes.nombre = Productos.nombre"

 

Cláusula WHERE

Esta cláusula, lo que permite es especificar cuales registros de las tablas indicadas en la cláusula FROM se verán afectados por la instrucción SELECT, UPDATE o DELETE.

Por ejemplo: La siguiente sentencia selecciona todos registros de la tabla Clientes donde el campo Deuda sea menor o igual a 100

sq = "SELECT * FROM clientes WHERE Deuda <= 100;"

Dentro de la cláusula Where podemos utilizar operadores , And, Or, >, <, <> , el Like etc..., para formar los criterios en la consulta sql

Lo siguiente selecciona los campos Nombre y Telefono de la tabla clientes donde el campo Nombre ( Nombres de los clientes ) comienzan con la letra M hasta la R

sq = "SELECT Nombre, Telefono FROM Clientes WHERE Nombre Like '[M-R]*';"

En este enlace hay un simple ejemplo que usa el operador Like para filtrar un recordset Ado al seleccionar un item de un control tabstrip : Ver ejemplo

 

Ordenar el conjunto de registros - Order By

 

Este ejemplo ordena los registros por el campo Localidad en forma Ascendente usando la instrucción ORDER BY

Sq = "SELECT Telefono, Localidad FROM Clientes ORDER BY Localidad ASC"

Para hacerlo en forma Descendente se utliza DESC. Por Ejemplo:

sq = "SELECT Telefono, Localidad FROM Clientes ORDER BY Localidad DESC"

 

Función Count - Contar registros

 

Con esta función podemos contar registros , dependiendo como especifiquemos la consulta, es decir los criterios, por ejemplo el siguiente código devuelve el total de registros de la tabla Clientes, donde el campo Nombre sea igual a "Mariano"

rst.Open "SELECT Count(Nombre) as NRegistros FROM Clientes WHERE Nombre = 'Mariano'"

'Mostramos la cantidad
MsgBox rst.Fields("NRegistros")

 

Función Max y Min

Max y Min devuelven un valor máximo o mínimo de una consulta de selección. El siguiente ejemplo, selecciona el Cliente (campo Nombre ) que mas ha gastado (consulta el campo Gastos). y muestra ese registro en un Datagrid llamado DataGrid1

Dim base As Connection, rst As Recordset, ruta As String

Set base = New Connection
Set rst = New Recordset

ruta = App.Path & "\bd1.mdb"

'Abrimos la base de datos
base.CursorLocation = adUseClient
base.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta

'Abrimos el recordset y Ejecutamos la consulta
rst.Open "SELECT Max(Gastos) As Maximo, Min(Gastos) As Minimo FROM Clientes", _
base

'Mostramos el resultado Maximo y Minimo del campo Gastos
MsgBox rst.Fields("Maximo")
MsgBox rst.Fields("Minimo")

Este otro ejemplo selecciona El valor Minimo del campo Gastos, donde el Nombre del Cliente sea Mariano

"SELECT Min(Gastos) As Maximo FROM Clientes WHERE Nombre = 'Mariano';"

Nota: en este enlace hay un código fuente sencillo que usa ado para poder obtener el valor máximo de un campo numérico : Función Max de sql con ado

 

 

Función SUM ( Sumar registros )

Con esta función obtenemos la suma de un conjunto de valores contenidos en un campo especificado al ejecutar una consulta. Por ejemplo, el siguiente código SUMA toda la columna Gastos y muestra ese valor en un mensaje

rst.Open "SELECT Sum(Gastos) As Total FROM Clientes", _
base

'Mostramos la suma de todo la columna o campo Gastos
MsgBox rst.Fields("Total")

 

Función Avg ( Obtener promedios)

La función AVg Calcula el promedio de un conjunto de valores contenido en un campo especificado al hacer una consulta.

El siguiente código calcula el promedio de todos los registros de un Campo llamada Ganancias ubicado en una tabla Ventas y muestra el resultado en un mensaje

' Consulta para obtener el promedio con Avg
sq = "SELECT Avg(Ganancias) As Promedio FROM Ventas"

'Abrimos el recordset
rst.Open sq, base

'Mostramos el promedio de todo la columna o campo Gastos
MsgBox rst.Fields("Promedio")

Este otro ejemplo es igual al anterior pero calcula la media o promedio en donde las ganancias sean mayores o iguales a 100

' Consulta para obtener el promedio de las ganancias matores o iguales a 30
sq = "SELECT Avg(Ganancias) As Promedio FROM Ventas WHERE Ganancias >= 30"

'Abrimos el recordset
rst.Open sq, base

'Mostramos El promedio
MsgBox rst.Fields("Promedio")

 


2 - Instrucción DELETE

La instrucción Delete se utiliza para crear una consulta de eliminación registros de una o más tablas especificadas en una cláusula FROM y que la cláusula WHERE, si es que esta última existe.

La sintáxis de esta instrucción es la siguiente:

DELETE Campos FROM Latabla WHERE Elcriterio

Por ejemplo, el siguiente código elimina Todos los registros de una tabla llamada Clientes donde el campo Nombre sea igual a Maria

base.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta

' Consulta de eliminación de datos con Delete
sq = "DELETE * FROM Clientes WHERE Nombre = 'Maria'"

'Abrimos el recordset y ejecutamos la consulta de eliminación
rst.Open sq, base

Este otro ejemplo elimina todos los valores o datos de la tabla Clientes donde el campo Deudas sea menor o igual a 10

' Consulta de eliminación de datos con Delete
sq = "DELETE * FROM Clientes WHERE Deudas <= 10"

'Abrimos el recordset y ejecutamos la consulta de eliminación
rst.Open sq, base

Importante En una instrucción DELETE, si no se especifica un criterio, se eliminan todos los registros. La siguiente instrucción elimina todos los datos de la tabla Clientes.

' Se elimian todos los datos de la tabla
sq = "DELETE * FROM Clientes"

En el caso anterior, al no especificar un criterio, como se dijo, se elimina de la tabla los registros pero la estructura de la tabla se mantiene. Para eliminar una tabla con la estructura completa y todos sus datos se utiliza la instrucción DROP TABLE, por ejemplo:

' Elimina la tabla completamente de la base de datos
sq = "DROP TABLE Clientes"

Importante: al eliminar datos utilizando DELETE o DROP no se pueden restaurar, por lo tanto es recomendable siempre tener copia y respaldo de dichos datos. También se suele utilizar antes de eliminar, una consulta de selección, chequear los datos y luego proceder a la eliminación.

Nota : en la sección de código fuente de vb 6.0 hay algunos programitas simples que utilizan la instrucción delete de sql

 


3 - Instrucción INSERT INTO ( añadir registros )

Esta instrucción sirve para añadir un único registro a una tabla y utilizandola conjuntamente con Select From se pueden insertar varios al mismo tiempo. Al agregar un registro, este se inserta al final de la tabla.

La sintaxis es:

INSERT INTO Tabla (Campo1, Campo2, etc..) Values (valor1, valor2, etc..)

Importante: El orden de los valores y el orden de los campos deben coincidir.

El siguiente ejemplo agrega a una tabla llamada Productos, un nuevo producto llamado Bebidas y un valor para el campo Stock del mismo

 

' Agrega un nuevo registro
sq = " INSERT INTO Productos (NombreProducto, stock) VALUES ('Bebidas', 150);"

 

El siguiente ejemplo selecciona todos los registros de una tabla llamada productos e inserta todos ellos en otra tabla llamada NuevosProductos. ( Obviamente la tabla Nuevos productos debe existir )

 

' Consulta utilizando Insert Into y Select From
sq = "INSERT INTO NuevosProductos SELECT * FROM Productos"

Nota : para insertar registros a una tabla que provienen de otra base de datos utilizar la cláusula IN.

 

Ejemplo de Insert Into utilizando ADO

La siguiente rutina inserta un nuevo registro con algunos valores, en una base de datos llamada Clientes.Mdb, ubicada en el App de la aplicación, en la tabla T_Clientes, que tiene los campos, Nombre, Apellido e Email

Para utilizar Ado agregar la referencia a Microsoft Activex Data Objects desde el menú referencias

Colocar un Command1 y el código fuente en el formulario

Option Explicit

Private Sub Command1_Click()

On Local Error GoTo ErrSub

Dim path As String
Dim sql As String
Dim cn_ADO As ADODB.Connection
Dim ctl As Control


    'Path de la base de datos
    path = App.path & "\Clientes.Mdb"

    'Crea un nuevo objeto connection
    Set cn_ADO = New ADODB.Connection
    
    'Cadena de conexión
    cn_ADO.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & path & ";" & _
        "Persist Security Info=False"
    
    'Abre la base de datos Clientes.Mdb
    cn_ADO.Open

    ' Consulta Sql para insertar los registros
    ' en la tabla Clientes, en la Tabla T_Clientes
    sql = "INSERT INTO T_Clientes " & _
    "(Nombre, Apellido, Email) VALUES ('Carlos','Gonsales', 'carlos@gmail.com')"

    'Ejecuta la consulta
    cn_ADO.Execute sql, , adCmdText

    ' Cierra la base de datos
    cn_ADO.Close
    
    'Elimina el objeto conexión
    Set cn_ADO = Nothing

Exit Sub

'Error
ErrSub:

MsgBox Err.Description, vbCritical
End Sub 

 

 


4 - Instrucción UPDATE ( Actualizar )

Esta instrucción crea una consulta de actualización de datos que cambia los valores de los campos en una tabla concreta según el criterio específico.

Esta consulta actualiza en una tabla llamada Productos los campos NombreProducto y el Stock

' Actualiza todos los datos del campo Stock,en el cual el campo _
NombreProducto es igual a Bebidas

sq = "UPDATE Productos SET Stock = 255 Where NombreProducto='Bebidas';"

Este otro ejemplo es exactamente igual, pro el Stock lo incrementa por 2

' Actualiza todos los datos del campo Stock,en el cual el campo _
NombreProducto es igual a Bebidas

sq = "UPDATE Productos SET Stock = Stock * 2 Where NombreProducto='Bebidas';"

Update es muy útil cuando se desea actualizar de un saque muchos registros o registros de varias tablas al mismo tiempo. Nota: Una ves que se ejecuta la instrucción Update, no se pueden reestablecer los cambios


5 - Instrucción CREATE TABLE

Con dicha Instrucción se pueden crear y definir nuevas tablas en una base de datos, incluyendo la estructura y campos.

Ejemplo 1

' Crea una tabla con dos campos de texto.

sq = "CREATE TABLE Productos " _
& "(Nombre TEXT, Descripcion TEXT);"

Lo siguiente crea una nueva tabla llamada Clientes, con 2 campos: uno Nombre y otro Alta, de tipo Text y Fecha respectivamente

sq = "CREATE TABLE Clientes" _
& "(Nombre TEXT, Alta DATETIME);"

 

Ejemplo 2:

Este es otro ejemplo utilizando ADO. y lo que hace es crear una tabla llamada Clientes con tres campos, IdCliente, Nombre y Apellido. Luego agrega tres registros.

Para el ejemplo incluir la referencia a Microsoft Ado y colocar en la carpeta del proyecto una base de datos vacía de prueba llamada bd1.mdb

Option Explicit

Private Sub Command1_Click()

Dim Path_base As String
Dim cn As ADODB.Connection



    Path_base = App.Path & "\bd1.mdb"

    'Crea un nuevo objeto connection
    Set cn = New ADODB.Connection
    
    'Cadena de conexión
    cn.ConnectionString = _
        "Provider=Microsoft.Jet.OLEDB.4.0;" & _
        "Data Source=" & Path_base & ";" & _
        "Persist Security Info=False"
    
    ' Abre la conexión a la base bd1
    cn.Open

    ' Elimina la tabla Clientes si es que existe con la instrucción DROP
    On Error Resume Next
    cn.Execute "DROP TABLE Clientes"
    
    On Error GoTo 0
    
    With cn
    
    ' Ejecuta la consulta: Crea la tabla con los tres campos
    .Execute "CREATE TABLE Clientes(" & _
            "IDCliente INTEGER      NOT NULL," & _
            "Nombre   VARCHAR(40)  NOT NULL," & _
            "Apellido  VARCHAR(40)  NOT NULL)"

    ' Inserta tres registros
    .Execute "INSERT INTO Clientes VALUES (1, 'Pedro', 'Gonsales')"
    .Execute "INSERT INTO Clientes VALUES (2, 'Martin',    'Rodrigues')"
    .Execute "INSERT INTO Clientes VALUES (3, 'MAria',    'Marino')"
    
    'Cierra la conexión
    .Close
    End With
End Sub 

 

Nota: para modificar la estructura de una tabla existente ( campos, tipo de datos ), ver la instrucción ALTER TABLE

 


6 - INNER JOIN

La operación Inner Join se utiliza para combinar registros de dos tablas pero siempre y cuando en ellas existan datos o valores coincidentes o iguales en algún campo en común entre las 2 tablas

El siguiente ejemplo selecciona y combina los registros de una tabla llamada Productos con otra tabla llamada NuevosProductos, donde el campo en común es "Nombre". es decir devolverá el conjunto de datos donde el campo Nombre de la tabla Productos coincida con el campo Nombre de la tabla NuevosProductos . Luego en el ejemplo se muestra el resultado en un control Datagrid:

    Dim base As Connection, rst As Recordset, ruta As String
    
    Set base = New Connection
    Set rst = New Recordset
    
    ruta = App.Path & "\bd1.mdb"
    
    'Abrimos la base de datos
    base.CursorLocation = adUseClient
    base.Open "PROVIDER=Microsoft.Jet.OLEDB.4.0;Data Source=" & ruta

    'Consulta
    rst.Open "SELECT * FROM Productos " _
    & "INNER JOIN NuevosProductos ON Productos.Nombre = NuevosProductos.Nombre", base

    
    'Asignamos el recordset devuelto en un control Datagrid
    Set DataGrid1.DataSource = rst 

Nota: al combinar los datos de dos campos, estos deben ser de un tipo de dato similar, por ejemplo se pueden combinar entre Autonumerico y Long, pero no se puede entre single y Double, Single y String etc.. Lo que tampoco se puede hacer con al Utilizar Inner Join es combinar datos en el cual los campos son de tipo Ole o Memo

 


Recursos visual basic.NET - Relacionados

Recursos Visual basic 6.0 - Enlaces relacionados

 


Buscar en Recursos vb