Curso
sobre Visual Basic
por
Guillermo Llanderas
Tercera Parte
Los temas incluidos:
|
Ejemplos de como crear una Base de Datos en runtime
> Creaci�n de Bases de Datos en RunTime.
'
'Procedimiento para crear una DB y tablas asociadas en runtime
'
Const DbPath As String = "acuario2.mdb"
'Definici�n de la Base de Datos
Dim NewDb As Database
Dim Ws As Workspace
'Primero se crea un espacio de trabajo
Set Ws = DBEngine.Workspaces(0)
Dim DbOpciones As Long
'la DB ser� en formato Access 2.0 y estar� encriptada
DbOpciones = dbVersion20 + dbEncrypt
'Esto crea la DB
Set NewDb = Ws.CreateDatabase(DbPath, dbLangGeneral, DbOpciones)
'Definici�n de una tabla
Dim NewTb As TableDef
'Aqu� se crea una tabla en el DB
Set NewTb = NewDb.CreateTableDef("Articulos")
'Se establece una normativa en la tabla que es que la cantidad m�nima a
'tener debe de ser mayor o igual a 0
NewTb.ValidationRule = "CantidadMinima >= 0"
'Mensaje de error si no se cumple la regla anterior
NewTb.ValidationText = "La cantidad m�nima debe ser mayor o igual a 0"
'Definici�n de los campos de la tabla
'La tabla de art�culos va a constar de 7 campos diferentes
ReDim Campo(1 To 9) As Field
'Definici�n del primer campo de la tabla
Set Campo(1) = NewTb.CreateField("Articulo", dbLong)
'Idem del segundo campo
Set Campo(2) = NewTb.CreateField("Descripcion", dbText, 50)
'Idem del tercer campo. Las propiedades se establecen de forma expl�cita,
'en vez de usar los argumentos de CreateField
Set Campo(3) = NewTb.CreateField()
Campo(3).Name = "Categoria"
Campo(3).Type = dbText
Campo(3).Size = 10
Set Campo(4) = NewTb.CreateField("Mayorista", dbSingle)
'Se establecen propiedades de validaci�n del campo
Campo(4).ValidationRule = "[Mayorista]>0"
Campo(4).ValidationText = "El precio de mayorista debe ser mayor que 0"
Set Campo(5) = NewTb.CreateField("Minorista", dbSingle)
Set Campo(6) = NewTb.CreateField("CantidadMinima", dbInteger)
Set Campo(7) = NewTb.CreateField()
Campo(7).Name = "Disponible"
Campo(7).Type = dbInteger
Set Campo(8) = NewTb.CreateField("Proveedor", dbLong)
Set Campo(9) = NewTb.CreateField("Fotografia", dbLongBinary)
'Se a�aden los campos a la definici�n de la tabla
Dim i As Byte
For i = 1 To 9
NewTb.Fields.Append Campo(i)
Next i
'Definici�n de los �ndices de la tabla
Dim IdxArticulo As Index, IdxMayorista As Index
Dim CampoArticulo As Field, CampoMayorista As Field
'Primero se crea un �ndice
Set IdxArticulo = NewTb.CreateIndex("Articulo")
'y se establece que va a ser el �ndice primario
IdxArticulo.Primary = True
'Se crea un campo que va ser el que forma el �ndice
Set CampoArticulo = IdxArticulo.CreateField("Articulo")
'y se a�ade el campo al �ndice.
IdxArticulo.Fields.Append CampoArticulo
'Se crea otro �ndice para la tabla
Set IdxMayorista = NewTb.CreateIndex("PrecioPagado")
'y se establece que va no va a ser de tipo �nico
IdxMayorista.Unique = False
'Si el �ndice es multicampo, se podr�an a�adir m�s campos
Set CampoMayorista = IdxMayorista.CreateField("Mayorista")
'El orden del �ndice va a ser descendente
CampoMayorista.Attributes = dbDescending
IdxMayorista.Fields.Append CampoMayorista
'A continuaci�n se a�aden los �ndices a la tabla
NewTb.Indexes.Append IdxArticulo
NewTb.Indexes.Append IdxMayorista
'Lo �ltimo que hay que hacer es incorporar la tabla a la base de datos
NewDb.TableDefs.Append NewTb
'Las tablas y los �ndices tambi�n se pueden crear usando consultas DDL
Dim SQLCreate As String
SQLCreate = "CREATE TABLE Clientes (Cliente LONG, Apellidos TEXT (30), "
SQLCreate = SQLCreate + "Nombre TEXT (30), Direccion TEXT (40), "
SQLCreate = SQLCreate + "Ciudad TEXT (30), Provincia TEXT (2), "
SQLCreate = SQLCreate + "CodigoPostal TEXT (5), Interes MEMO, "
SQLCreate = SQLCreate + "Vendedor TEXT (6))"
NewDb.Execute SQLCreate
SQLCreate = "CREATE TABLE Vendedores (Vendedor TEXT (6), Apellidos TEXT (30)"
SQLCreate = SQLCreate + ", Nombre TEXT (30))"
NewDb.Execute SQLCreate
SQLCreate = "CREATE TABLE Pedidos (Pedido LONG, Cliente LONG, "
SQLCreate = SQLCreate + "Vendedor TEXT (6), FechaPedido DATETIME, "
SQLCreate = SQLCreate + "PrecioTotal SINGLE)"
NewDb.Execute SQLCreate
SQLCreate = "CREATE TABLE Ventas (Pedido LONG, Articulo LONG)"
NewDb.Execute SQLCreate
SQLCreate = "CREATE TABLE Proveedores (Proveedor LONG , Nombre TEXT (50), "
SQLCreate = SQLCreate + "Contacto TEXT (50), Direccion TEXT (50), "
SQLCreate = SQLCreate + "Ciudad TEXT (30), Provincia TEXT (2), "
SQLCreate = SQLCreate + "CodigoPostal TEXT (5), Telefono TEXT (13))"
NewDb.Execute SQLCreate
'Creaci�n de los �ndices de las tablas"
SQLCreate = "CREATE INDEX NumCliente ON Clientes (Cliente) WITH PRIMARY"
NewDb.Execute SQLCreate
SQLCreate = "CREATE INDEX NumVendedor ON Vendedores (Vendedor) "
SQLCreate = SQLCreate + "WITH PRIMARY"
NewDb.Execute SQLCreate
SQLCreate = "CREATE INDEX NumPedido ON Pedidos (Pedido) WITH PRIMARY"
NewDb.Execute SQLCreate
SQLCreate = "CREATE INDEX NumVenta ON Ventas (Pedido) WITH PRIMARY"
NewDb.Execute SQLCreate
SQLCreate = "CREATE INDEX NumProveedor ON Proveedores (Proveedor) "
SQLCreate = SQLCreate + "WITH PRIMARY"
NewDb.Execute SQLCreate
'Definici�n de las relaciones entre tablas empleando el objeto relaci�n
Dim NewRel As Relation
Dim CampoRel As Field
'Aqu� se crea el objeto relaci�n
Set NewRel = NewDb.CreateRelation("Clientes_Pedidos")
'Se especifican las propiedades de la relaci�n
NewRel.Table = "Clientes"
NewRel.ForeignTable = "Pedidos"
'Crear el campo de relaci�n y establecer las propiedades
Set CampoRel = NewRel.CreateField("Cliente")
CampoRel.ForeignName = "Cliente"
'Agregar el campo a la relaci�n y la relaci�n a la DB
NewRel.Fields.Append CampoRel
NewDb.Relations.Append NewRel
Set NewRel = NewDb.CreateRelation("Proveedores_Articulos")
NewRel.Table = "Proveedores"
NewRel.ForeignTable = "Articulos"
Set CampoRel = NewRel.CreateField("Proveedor")
CampoRel.ForeignName = "Proveedor"
NewRel.Fields.Append CampoRel
NewDb.Relations.Append NewRel
'Se cierra la base de datos y se liberan los recursos
NewDb.Close
MsgBox "Base de datos creada"
'Ahora para trabajar con la tabla debemos abrir la DB y la tabla.
Dim WsAcuario As Workspace
Dim DbAcuario As Database
Dim TbClientes As Recordset
Set WsAcuario = DBEngine.Workspaces(0)
Set DbAcuario = WsAcuario.OpenDatabase(DbPath)
Set TbClientes = DbAcuario.OpenRecordset("Clientes", dbOpenTable)
On Error GoTo Errores
WsAcuario.BeginTrans
TbClientes.AddNew
TbClientes("Cliente") = 1
TbClientes("Apellidos") = "Apellido cliente 1"
TbClientes("Nombre") = "Nombre del cliente 1"
TbClientes("Direccion") = "Direccion cliente 1"
TbClientes("Ciudad") = "Ciudad cliente 1"
TbClientes("Provincia") = "Po"
TbClientes("CodigoPostal") = "36202"
TbClientes("Interes") = "Comentarios sobre el cliente n-mero 1"
TbClientes("Vendedor") = "VEND1"
TbClientes.Update
If MsgBox("+Guardar cambios?", vbQuestion + vbYesNo, "Guardar Cambios") =
vbYes Then
WsAcuario.CommitTrans 'Guardar los cambios
MsgBox ("Datos Guardados")
Else
WsAcuario.Rollback 'No guardar los cambios
MsgBox ("No se han guardado los datos")
End If
DbAcuario.Close
Exit Sub
Errores:
Dim Mensaje As String
Dim Respuesta As Integer
WsAcuario.Rollback
Mensaje = "Error numero " & Str(Err.Number) & " " & Err.Description
Respuesta = MsgBox(Mensaje, vbCritical, "Error al escribir")
SQL
Instruccion Funcion
----------- -------
DELETE FROM Elimina un registro de una tabla
INSERT INTO Agrega un grupo de registros a una tabla
SELECT Recupera un grupo de registros y los situa en una dynaset o tabla
TRANSFORM Genera una tabla resumen utilizando el contenido de un campo como
encabezados de columnas
UPDATE Modifica los valores de campos especificos de la tabla
'Instruccion SELECT: Recupera un grupo de registros y los situa en una dynaset
' o tabla
SELECT [predicado] FieldList [INTO NombreTabla] FROM TableList
[relaciones de tabla] [opciones de rango] [opciones de ordenacion]
[opciones de grupo]
'FieldList -> definici�n de lo campos a incluir en el recordset de salida
' pueden ser campos de una tabla, de varias o campos calculados
' basados en otros de la tabla. El formato es:
[TableName.]Field1 [AS Alias1][, [TableName.]Field2 [AS Alias2]]...
' el * se puede usar para seleccionar todos los campos de la
' tabla especificada.
' Lo campos calculados se pueden obtener a partir de operaciones
' aritmeticas (+, -, *, /, ^) con campos numericos o mediante la
' union de campos alfanumericos (operador &). Tambien se pueden
' usar funciones propias de Visual Basic.
' Mediante el uso de la clausula AS, se puede especificar un
' nombre alternativo para el campo.
' Tambien se puede usar SELECT para realizar calculos sobre la
' informacion de la tabla, mediante las funciones de agregado de
' SQL. Estas funciones de agregado devuelven un solo valor para
' todo el conjunto de registros, a menos que se emplee la clausula
' GROUP BY que devuelve un valor para grupo de registros. Las
' funciones de agregado disponibles son:
' AVG: Media aritmetica del campo
' COUNT: Numero de registros
' MIN: Valor minimo del campo
' MAX: Valor maximo del campo
' SUM: Valor total del campo (suma de todos los valores)
' FIRST: Valor del campo para el primer registro del recordset
' LAST: Valor del campo para el ultimo registro del recordset
' STDEV: Desviacion tipica de los valores del campo
' STDEVP: Desviacion tipica de los valores del campo
' siempre referidas a los registros que cumplan la cl�usula WHERE
'TableList -> Se usa para indicar la o las tablas de donde se va a coger la
' informacion. El formato es:
FROM Tabla1 [IN DataBase1] [AS Alias1][, Tabla2 [IN DataBase2] [AS Alias2]]...
' La parte IN de la clausula se usa para especificar la base de
' datos donde esta la tabla.
' Usando la parte AS de la clausula se puede asignar un alias
' la tabla para usarlo en el resto de las clausulas
'predicado -> Se usa para especificar si se desan todos los registros que
' cumplan las condiciones o determinar valores �nicos para
' los campos. El formato es:
SELECT [{ALL/DISTINCT/DISTINCTROW}] FieldList
' Usando el predicado ALL, que se coge por defecto, se seleccionan
' todos los registros para la consulta. Con DISTINCT el motor de
' DB recupera solo un registro con un conjunto especificado de
' valores de campo (independientemente de cuantos duplicados
' haya); o sea, para que un registro sea rechazado debe de tener
' los valores de todos los campos seleccionados iguales a los de
' otro registro. El predicado DISTINCTROW compara los valores de
' todos los campos de la tabla, esten o no seleccionados.
'relaciones de tabla -> Se usa para poder especificar las relaciones entre
' las diferentes tablas que configuran la consulta. Existen dos
' formas de especificar las relaciones: JOIN y WHERE. Mediante el
' uso de WHERE se genera un recordset de solo lectura.
' JOIN: Combina dos tablas en base al contenido de campos
' especificos de cada una y el tipo de JOIN. Su formato es:
Tabla1 {INNER|LEFT|RIGHT} JOIN Tabla2 ON Tabla1.Clave1 = Tabla2.Clave2
' Al usar INNER, de ambas tablas solo se cogen aquellos registros
' que tengan correspondecia con la otra tabla. Mediante LEFT, de
' la tabla de la izquierda se cogen todos los registros y de la
' tabla de la derecha solo los que tengan correspondecia en la
' tabla de la izquierda. Con RIGHT se consigue el caso contrario.
' WHERE: Se usa para filtrar los registros devueltos por una
' consulta, pero se puede emplear para emular una INNER JOIN
WHERE [Tabla1].Field1 = [Tabla2].Field2
' La clausula WHERE funciona igual que INNER JOIN. El recodset
' obtenido es de solo lectura
'opciones de rango -> Se usa para especificar el rango de los registros a
' procesar. El formato es:
WHERE ExpresionLogica1 [{AND|OR} ExpresionLogica2]...
' Existen cuatro tipos de predicados (de expresiones logicas) que
' se pueden usar con la clausula WHERE:
' Predicado de comparacion: Compara un campo con un valor dado.
' Los operadores que se pueden usar son < <= = >= > <>
Expresion1 Comparador Expresion2
' Predicado LIKE: Compara un campo con un modelo. Los patrones
' se pueden hacer con * (equivale a multiples caracteres), ? (un
' caracter), # (un digito), [lista] (un caracter de la lista; por
' ejemplo, [c-f] para c, d, e y f), [!lista] (para un caracter
' que no este en la lista), o una combinacion de los anteriores.
Expresion LIKE Modelo
' Predicado IN: Compara un campo con una lista de valores
' aceptables.
Expresion IN Lista
' Predicado BETWEEN: Compara un campo con un rango de valores. La
' busqueda es inclusiva, o sea, si el valor es igual a uno de los
' puntos finales del intervalo, se incluye el registro
Expresion [NOT] BETWEEN Valor1 AND Valor2
'opciones de ordenacion -> Se usa para determinar el orden en que han de
' aparecer los registros en la dynaset de salida.
ORDER BY Field1 [ASC|DESC][, Field2 [ASC|DESC][, ...]]
' Empleando la palabra clave ASC se especifica que la ordenacion
' va a ser ascendente, mientras que con DESC la ordenacion sera
' descendente (por defecto se toma ascendente)
'opciones de grupo -> Permite generar un recordset que solamente tiene un
' registro por caso de unos campos especificados. Su formato es:
GROUP BY Field1 [, Field2]... [HAVING ExpLogica1 [{AND|OR} ExpLogica2]...]
' Esta clausula indica que se han de agrupar las filas de la
' tabla, de tal manera que todas las que tengan iguales valores
' en las columnas de agrupamiento formen un grupo.
' Mediante la clausula HAVING se puede especificar cuales de los
' registros seleccionados (mediante WHERE) hay que visualizar.
'NombreTabla -> permite especificar el nombre de una tabla donde se grabara
' la consulta obtenida. Su sintaxis es:
INTO NombreTabla
' La instruccion SELECT genera un synaset o un snapshot temporal,
' esto es, su contenido unicamente existe mientras esten abiertos.
' Mediante el uso de la clausula INTO se especifica un nombre de
' una tabla y la consulta se guardar� permanentemente en esa
' tabla (si ya existia, la salida la reescribe)
'Instruccion DELETE: Elimina un registro (o varios) de una tabla
DELETE FROM NombreTabla [WHERE ClausulaWhere]
'clausula WHERE -> Se usa para especificar un criterio a cumplir por los
' registros a borrar. En esta clausula se puede emplear cualquier
' predicado de comparacion. Si se omite esta clausula, se borran
' todos los registros de la tabla
'Instruccion INSERT INTO: Agrega un grupo de registros a una tabla
INSERT INTO NombreTabla [IN DataBase] [(Field1[, Field2]...)]
{ SELECT InstruccionSelect | VALUES (Value1[, Value2]...) }
'Field1, Field2,... -> Lista de nombres de columnas de la tabla que van a
' recibir los valores enviados. No hace falta poner todas de las
' que consta la tabla ni ponerlas en el mismo orden en que han
' sido definidos. Si se omite, se interpreta como si se
' especificara una lista incluyendolas a todas y en dicho orden.
'instruccion SELECT -> Si es emplea, los datos a a�adir a la tabla seran los
' que devuelva la consulta SELECT.
'clausula VALUES -> Si se emplea, se crea un registro en la tabla con los
' valores especificados con esta clausula.
'Instrucci�n UPDATE: Modifica los valores de campos especificos de la tabla
UPDATE NombreTabla SET Field1=Valor1[, Field2=Valor2]... [WHERE ClausulaWhere]
'clausula SET -> Especifica los campos a modificar y los nuevos valores.
'clausula WHERE -> Se usa para especificar un criterio a cumplir por los
' registros a modificar. En esta clausula se puede emplear
' cualquier predicado de comparacion. Si se omite esta clausula,
' se modifican todos los registros de la tabla
'Ejecuci�n de instrucciones SQL desde VB:
DateBase.EXECUTE Source[, Options]
' Ejecuta la instrucci�n SQL en la base de datos indicada. Solo admite las
' instrucciones que son de acci�n, no las de consulta que
' devuelven un recordset
'Source -> Instruccion SQL a ejecutar
'Options -> Integer que determina las caracteristicas de integridad de datos
' de la consulta. Puede tener una combinacion de los siguientes
' valores:
' dbDenyWrite Deny write permission to other users.
' dbInconsistent (Default) Inconsistent updates.
' dbConsistent Consistent updates.
' dbSQLPassThrough SQL pass-through. Causes the SQL statement to be
' passed to an ODBC database for processing.
' dbFailOnError Roll back updates if an error occurs.
' dbSeeChanges Generate a run-time error if another user is changing
' data you are editing
Set Querydef = DataBase.CreateQueryDef([Name][, Source]
Querydef.EXECUTE [Options]
' Permite crear una consulta o una acci�n SQL en la base de datos para despues
' ejecutarla. Esta instruccion SQL se almacen en la base de datos
' junto con las tablas
'Name -> Nombre que tendra la consulta SQL en la base de datos
'Source -> Instruccion SQL a ejecutar
'Options -> Las mismas que para DataBase.EXECUTE
Ejemplos de SQL
' En la sintaxis SQL se debe de usar comillas simples en vez de dobles.
'Seleccionar todos los registros de una tabla con todos sus campos
SELECT *
FROM Ventas
'Seleccionar todos los registros, pero solo unos campos
' los nombres de campos con espacios en blanco deben ir entre corchetes.
SELECT Articulo, Descripcion, [Precio Venta]
FROM Ventas
'Seleccionar todos los campos de la tabla Ventas y los campos Descripcion
' y Minorista de la tabla de Articulos, relacionando ambas tablas por el
' codigo del articulo.
SELECT Ventas.*, Articulos.Descripcion, Articulos.Minorista
FROM Ventas, Articulos
WHERE Ventas.Articulo = Articulos.Articulo
'Calcular el precio total de los articulos. Esta consulta crea un campo
' con el resultado de la multiplicacion
SELECT Articulos.Minorista * Ventas.Cantidad
FROM Articulos, Ventas
WHERE Ventas.Articulo = Articulos.Articulo
'Crea una consulta con el apellido y el nombre de los clientes, separados
' por una coma, en un solo campo
SELECT Apellido & ", " & Nombre
FROM Clientes
'Crea un identificador de cliente utilizando las 3 primeras letras de los
' campos Apellidos y Nombre y pone todo en mayusculas
SELECT UCASE$(MID$(Apellidos, 1, 3) & UCASE$(MID$(Nombre, 1, 3)
FROM Clientes
'Crea un recordset con un �nico registro con el stock m�nimo, el m�ximo
' y el medio de los art�culos as� como el coste total de las existencias
SELECT Min(Stock), Max(Stock), Avg(Stock), Sum(Stock * Articulos.Precio)
FROM Articulos
'Crea una consulta compuesta de dos campos, una cantidas y la raiz cuadrada
' de esa cantidad. A estos campos les asigna un nombre alternativo
SELECT Cantidad AS Cant1, SQR(Cantidad) AS Cant2
FROM Ventas
'Crea una consulta con datos de dos bases de datos diferentes
SELECT Clientes.Apellido & Clientes.Nombre AS Nombre, [Codigos
Postales].Ciudad,
[Codigos Postales].Provincia
FROM Clientes, [Codigos Postales] IN Codigos
WHERE Clientes.[Codigo Postal] = [Codigos Postales].[Codigo Postal]
'Lo mismo que el anterior ejemplo, pero usando un alias para las tablas
SELECT CS.Apellido & CS.Nombre AS Nombre, CP.Ciudad, CP.Provincia
FROM CS, CP IN Codigos
WHERE CS.[Codigo Postal] = CP.[Codigo Postal]
'No se seleccionan los registros que tengas todos los campos en ambas tablas
' iguales
SELECT DISTINCTROW Articulo
FROM Articulos, Ventas
WHERE Articulos.Articulo = Ventas.Articulo
'Se genera un recordset con todos los registros de la tabla Clientes, exista
' o no el vendedor asociado, en la que no saldr�n reflejados los vendedores
' que no tienen ning�n cliente asignado
SELECT CS.Apellido, CS.Nombre, VN.Apellido, VN.Nombre
FROM Clientes AS CS, Vendedores AS VN
CS LEFT JOIN VN ON CS.Vendedor = VN.Vendedor
'Selecciona todos los campos de los clientes que se apelliden Perez
SELECT *
FROM Clientes
WHERE Apellido = "Perez"
'Selecciona todos los campos de los art�culos con fecha mayor que 15/12/96
SELECT *
FROM Articulos
WHERE Fecha > #15/12/96#
'Selecciona todos los campos de los clientes que tengan como segunda letra
' del apellido, una letra a, b o c
SELECT *
FROM Clientes
WHERE MID$(Apellido, 2, 1) LIKE "[a-c]"
'Selecciona todos los campos de los clientes que tengan un apellido que no
' empieze por una vocal y que la tercera letra sea una n
SELECT *
FROM Clientes
WHERE LCASE$(Apellido) = "[!aeiou]?n*"
'Selecciona todos los campos de los clientes que sean gallegos
SELECT *
FROM Clientes
WHERE Provincia IN ("C", "Lu", "Or", "Po")
'Selecciona los clientes con fecha de enero de 1997
SELECT *
FROM Clientes
WHERE Fecha BETWEEN #1/01/97# AND #31/01/97#
'Selecciona los clientes con apellidos que no est�n entre la M y la P
SELECT *
FROM Clientes
WHERE Apellido NOT BETWEEN "M" AND "P"
'Selecciona los clientes que se apelliden Martinez de Pontevedra y Orense
SELECT *
FROM Clientes
WHERE Apellido = "Martinez" AND Provincia IN ("Po","OR")
'Selecciona los clientes ordenandolos por apellido (de forma descendente) y
' por el nombre (de forma ascendente)
SELECT *
FROM Clientes
ORDER BY Apellido DESC, Nombre
'Obtiene el total de ventas de las provincias
SELECT Provincia, SUM(VentasTotales)
FROM Clientes
GROUP BY Provincia
'Obtiene el total de ventas de las provincias que tengan mas de 10 clientes
' y la venta maxima a un solo cliente no sea superior a 1000
SELECT Provincia, SUM(VentasTotales)
FROM Clientes
GROUP BY Provincia
HAVING COUNT(*) > 10 AND MAX(VentasTotales) < 1000
'Obtiene una nueva tabla, Correos, con las direcciones de los clientes
SELECT CS.Apellido & ", " & CS.Nombre AS Nombre, CS.Direccion,
CP.Ciudad, CP.Provincia, CS.[Codigo Postal]
INTO Correos
FROM Clientes AS CS, [Codigo Postal] IN Codigos AS CP
WHERE CS.[Codigo Postal] = CP.[Codigo Postal]
'Elimina todos los clientes que vivan en Sevilla
DELETE FROM Clientes WHERE Provincia = "Se"
'Actualiza (a�ade nuevos registros) la tabla de direcciones de corro creada
' con la consulta SELECT INTO de mas arriba.
INSERT INTO Correo
SELECT CS.Apellido & ", " & CS.Nombre, CS.Direccion,
CP.Ciudad, CP.Provincia, CS.[Codigo Postal]
FROM Clientes AS CS, [Codigo Postal] IN Codigos AS CP
WHERE CS.[Codigo Postal] = CP.[Codigo Postal] AND CS.Fecha > UltimoMes
'A�ade un nuevo registro a la tabla de correo
INSERT INTO Correo
VALUES ("Perez, Jose", "Calle Mayor", "Vigo", "Po", "36201")
'Modifica el identificador de vendedor para todos los clientes que tengan
' el vendedor Perez.
UPDATE Clientes
SET Vendedor="GUTI"
WHERE Vendedor="PEREZ"
'Aumenta el precio al por menor de todos los articulos en un 5%
UPDATE Articulos
SET Minorista=Minorista*1.05
'Ejecuta una consulta SQL
DIM Db as Database
DIM Qd as QueryDef
Dim SQL as String
SQL = "DELETE FROM Titles WHERE ISBN IS NULL"
' mediante el uso de ejecutar de la base de datos
Db.EXECUTE SQL, dbFailOnError
' mediante la creacion de una QueryDef
Set Qd = Db.CreateQueryDef("Borrar libros sin ISBN", SQL)
Qd.EXECUTE dbFailOnError
' ejecutar la consulta con el m�todo ejecutar base de datos
Db.EXECUTE "Borrar libros sin ISBN", dbFailOnError