Sunteți pe pagina 1din 8

Nota: Esta es una gua muy bsica sobre el uso de Microsoft JET sql, por lo tanto se obvian muchos

temas, para una informacin detallada, pods ojear la referencia en el archivo llamado JETSQL35.HLP que se instala con Visual Basic. Tambin pods desde la siguiente pgina descargar otro manual de sql

1 - Instruccin Select
La instruccin SELECT permite obtener un conjunto de registros de una o varias tablas especificadas en la clusula o sentencia SQL. SELECT no modifica datos en una base de datos, solo extrae informacin 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 especficos: 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" Productos.Nombre FROM clientes, Productos WHERE Clientes.nombre =

Clusula WHERE
Esta clusula, lo que permite es especificar cuales registros de las tablas indicadas en la clusula FROM se vern afectados por la instruccin 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 clusula 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 instruccin 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"

Funcin Count - Contar registros


Con esta funcin podemos contar registros , dependiendo como especifiquemos la consulta, es decir los criterios, por ejemplo el siguiente cdigo 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")

Funcin Max y Min


Max y Min devuelven un valor mximo o mnimo de una consulta de seleccin. 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 cdigo fuente sencillo que usa ado para poder obtener el valor mximo de un campo numrico : Funcin Max de sql con ado

Funcin SUM ( Sumar registros )


Con esta funcin obtenemos la suma de un conjunto de valores contenidos en un campo especificado al ejecutar una consulta. Por ejemplo, el siguiente cdigo 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")

Funcin Avg ( Obtener promedios)


La funcin AVg Calcula el promedio de un conjunto de valores contenido en un campo especificado al hacer una consulta. El siguiente cdigo 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 - Instruccin DELETE
La instruccin Delete se utiliza para crear una consulta de eliminacin registros de una o ms tablas especificadas en una clusula FROM y que la clusula WHERE, si es que esta ltima existe. La sintxis de esta instruccin es la siguiente: DELETE Campos FROM Latabla WHERE Elcriterio Por ejemplo, el siguiente cdigo 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 eliminacin de datos con Delete sq = "DELETE * FROM Clientes WHERE Nombre = 'Maria'" 'Abrimos el recordset y ejecutamos la consulta de eliminacin 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 eliminacin de datos con Delete sq = "DELETE * FROM Clientes WHERE Deudas <= 10" 'Abrimos el recordset y ejecutamos la consulta de eliminacin rst.Open sq, base Importante En una instruccin DELETE, si no se especifica un criterio, se eliminan todos los registros. La siguiente instruccin elimina todos los datos de la tabla Clientes. ' Se eliminan 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 instruccin 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. Tambin se suele utilizar antes de eliminar, una consulta de seleccin, chequear los datos y luego proceder a la eliminacin. Nota : en la seccin de cdigo fuente de vb 6.0 hay algunos programitas simples que utilizan la instruccin delete de sql

3 - Instruccin INSERT INTO ( aadir registros )


Esta instruccin sirve para aadir 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 clusula 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 aplicacin, 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 cdigo 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 conexin 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 conexin Set cn_ADO = Nothing Exit Sub 'Error ErrSub: MsgBox Err.Description, vbCritical End Sub

4 - Instruccin UPDATE ( Actualizar )


Esta instruccin crea una consulta de actualizacin de datos que cambia los valores de los campos en una tabla concreta segn el criterio especfico. 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, pero 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 instruccin Update, no se pueden reestablecer los cambios

5 - Instruccin CREATE TABLE


Con dicha Instruccin 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 vaca 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 conexin cn.ConnectionString = _ "Provider=Microsoft.Jet.OLEDB.4.0;" & _ "Data Source=" & Path_base & ";" & _ "Persist Security Info=False" ' Abre la conexin a la base bd1 cn.Open ' Elimina la tabla Clientes si es que existe con la instruccin 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 conexin .Close End With End Sub

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

6 - INNER JOIN
La operacin Inner Join se utiliza para combinar registros de dos tablas pero siempre y cuando en ellas existan datos o valores coincidentes o iguales en algn campo en comn 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 comn 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

S-ar putea să vă placă și