You are on page 1of 9

1

CREAMOS LA BASE DE DATOS EN ACCESS


Abrimos Access y elegimos "Crear una nueva base de datos usando" "Base de datos de Access
en blanco"



Lo guardamos, por ejemplo, en "mis documentos", con el nombre "db1.mdb"
Despus creamos una tabla en vista diseo

ngresen los mismos datos ! ven a continuaci"n, ya ! estos son los datos #la tabla$ ! vamos a
usar para programar.

2

%uarden la tabla con el nombre "&abla1"
A'ora ingresamos los datos en la tabla(

) a'ora lo mas importante. *ara no tener inconvenientes de compatibilidad vamos a 'acer lo
siguiente(
"+erramientas ,- .tilidades de las base de datos ,- Convertir base de datos ,- A una versi"n
anterior de la base dee datos de Access..."

3


%uardamos con el nombre "base1.mdb"
/sta base de datos llamada "base1.mdb" es la ! vamos a usar en 0isual Basic. 1o usaremos la
otra #db1$ por motivos de compatibilidad. /n de2initiva, ambas bases de datos son iguales, solo
cambia la versi"n.
AHORA TRABAJAMOS EN VISUAL BASIC
Cuando creamos el proyecto lo primero ! debemos 'acer para trabajar con nuestra base de
datos es la "re2erencia al motor de bases de datos de 3icroso2t". *ara esto desde 0isual Basic
vamos al menu *royecto ,- 4e2erencia y seleccionamos 3icroso2t DA5 6.71 5bject Library #si
tenes otra versi"n igual tiene ! 2uncionar$.
A'ora para ver lo ! estamos 'aciendo cuando ejecutamos, vamos a agregar una ListBo8
#llamada List1$ en nuestro 2ormulario.
A partir de a'ora es todo codigo.
Creamos las variables en la parte %eneral del 2ormulario(
Dim BDD as DataBase 95bjeto para manejar la base de datos
Dim &BL as 4ecord:et 95bjeto para manejar la &abla
/s importante ! tengan en cuenta lo ! maneja cada objeto.
Dijimos ! el objeto BDD maneja la base de datos. /ntonces podemos cargarla alli de la
siguiente manera(
:et BDD ; 5penDatabase#"c(<mis documentos<base1.mdb"$ 9Abre la base de datos
Bueno, a'ora ! tenemos abierta la base de datos, vamos a reali=ar unas consultas utili=ando
ordenes :>L. *or lo tanto podriamos declarar una variable para almacenar nuestra sentencia
:>L.
Dim :>L As :tring
)a estamos listos para aplicar :>L...
SENTENCIAS DE SELECCIN O CONSULTAS
Bien, :>L permite reali=ar consultas mediante sentencias de selecci"n ":/L/C&".
Lo ! 'ace esta sentencia :/L/C& es tomar datos de una base de datos para devolverlos a !uien
se lo pidi" #en nuestro caso !uien se lo pide es el objeto &BL$.
:/L/C& consta de seis cl?usulas( las dos primeras obligatorias #:/L/C& y @453$ y las otras
opcionales #A+/4/, %45.* B), +A01%, .151, 54D/4 B)$.
:/L/C& y @453
@.1C51/: D/ A%4.*A3/1&5
A+/4/
%45.* B)
+A01%
.151
4
54D/4 B)
C51:.L&A: A 3A: D/ .1A &ABLA
SELECT y FROM
0eamos, con un ejemplo, como 2unciona(
:>L ; ":/L/C& B @453 tabla1"
:et &BL ; BDD.5pen4ecordset#:>L$ 9&BL almacena todos los valores de la tabla
1uestra orden :>L es( seleccionar #:/L/C&$ todos los campos #B$ de #@453$ la tabla1.
A'ora vamos a mostrar en la lista lo ! almacenamos.
&BL.3ove@irst 9nos posicionamos en el primer registro de la tabla
Do .ntil &BL./5@ 99La propiedad /5@ se pone &4./ cuando se a llegado al 2inal de la
tabla
List1.Addtem &BL#"nombre"$
&BL.3ove1e8t 9pasamos al siguiente registro
Loop
De esta manera, al ejecutar, nos debe aparecer en la lista todos los nombres de la tabla.
:i !ueremos mostrar "nombre" "apellido"(
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$
&BL.3ove1e8t
Loop
:i !ueremos listar "nombre" "apellido" tiene "edad"(
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$ C " tiene " C &BL#"edad"$
&BL.3ove1e8t
Loop
>u sucede si solo !uerDa tomar de la tabla1 los campos nombre y edad #no el apellido$. /n
este caso la sentencia :>L !uedarDa(
:>L ; ":/L/C& nombre,edad @453 tabla1"
*or lo tanto el 2ormato de la sentencia :/L/C& 'asta a'ora es(
:/L/C& campo1,campoE,...,campo1 @453 nombreFdeFlaFtabla
NOTA( :i ya terminamos de trabajar con la tabla y con la base de datos las podemos cerrar de
la siguiente manera(
&BL.Close 9cierra tabla
BDD.Close 9cierra base de datos
FUNCIONES DE AGRUPAMIENTO
Las 2unciones de agrupamiento son(
DISTINCT: Dijimos ! si usabamos el B nos seleccionaba todos los campos. &ambin 'ay un
operador llamado D:&1C&, ste elimina las 2ilas o registros duplicados del resultado de la
consulta. /sto se ve bien en el siguiente ejemplo(
:>L ; ":/L/C& D:&1C& edad @453 tabla1" 9almacena todas las edades sin
repetirlas
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"edad"$
&BL.3ove1e8t
Loop
COUNT: /ste operador nos devuelve la cantidad de valores en una columna. *or ejemplo,
C5.1&#nombre$ devolver? el nGmero de registros con valores no nulos en el campo nombre.
*ero si usamos C5.1&#B$, nos devuelve el nGmero de registros incluyendo a!uellos registros
con valores nulos.
:>L ; ":/L/C& C5.1&#B$ @453 tabla1" 9para saber la cantidad de registros #incluye
los nulos$
:et &BL ; BDD.5pen4ecordset#:>L$
5

List1.Addtem &BL#"e8pr1HHH"$ 9e8pr1HHH es el name del item de &BL ! almacena el
resultado del operador de agrupamiento
SUM: Devuelve la suma total de los valores de una e8presi"n de columna o campo 1.3/4CA
#si no es numerica les da errorI$ . *or ejemplo, :.3#edad$ devolver? la sumatoria de las
edades.
:>L ; ":/L/C& :.3#edad$ @453 tabla1" 9sumatoria de las edades
:et &BL ; BDD.5pen4ecordset#:>L$
List1.Addtem &BL#"e8pr1HHH"$
AVG: Devuelve el promedio de los valores de una e8presi"n de columna. *or ejemplo,
A0%#edad$ devolver? el promedio de las edades. /sto seria dividir :.3#edad$JC5.1&#edad$.
:>L ; ":/L/C& A0%#edad$ @453 tabla1"
MAX: Devuelve el valor m?s alto de los contenidos en una e8presi"n de columna.
:i 'acemos( :>L ; ":/L/C& 3AK#edad$ @453 tabla1" 1os dir? la edad mas alta.
MIN: :i 'ay un 3AK, por ! no puede 'aber un 31L ya se 'abran dado cuenta lo ! 'ace.
/ntonces, si :>L ; ":/L/C& 31#edad$ @453 tabla1" 1os dir? la edad mas baja.
/M/3*L5( !uiero saber cu?ntos registro tengo, cual es la menor edad y cual es el promedio de
todas las edades
Dim BDD As Database
Dim &BL As 4ecordset
Dim :>L As :tring
:et BDD ; 5penDatabase#"c(<mis documentos<base1.mdb"$
:>L ; ":/L/C& C5.1&#B$, 31#edad$, A0%#edad$ @453 tabla1"
:et &BL ; BDD.5pen4ecordset#:>L$
List1.Addtem "total de reg( " C &BL#"e8pr1HHH"$
List1.Addtem "313A /DAD( " C &BL#"e8pr1HH1"$
List1.Addtem "*453/D5 /DAD/:( " C &BL#"e8pr1HHE"$
&BL.Close
BDD.Close
WHERE
Con A+/4/ indicamos condiciones para la selecci"n de ciertos registros. 0eamos un ejemplo(
Antes ! nada nuestra sentencia :/L/C& !uedarDa asi(
:/L/C& campo1,campoE,...,campo1 @453 nombreFdeFlaFtabla A+/4/ condicion1
A1D condicionE A1D ... A1D condicion1
Dim BDD As Database
Dim &BL As 4ecordset
Dim :>L As :tring
:et BDD ; 5penDatabase#"c(<mis documentos<base1.mdb"$
:>L ; ":/L/C& B @453 tabla1 A+/4/ edad N 6H"
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"edad"$
&BL.3ove1e8t
Loop
&BL.Close
BDD.Close
Con esta instrucci"n decimos !( seleccione #:/L/C&$ todos los campos #B$ de #@453$ tabla1 !
cumplan la condici"n #A+/4/$ edad N 6H
GROUP BY
/sta cl?usula se utili=a para agrupar segun lo ! especi2i!uemos. *or ejemplo, podemos listar
todos los datos de nuestra tabla1, pero agrupados por edad.
:>L ; ":/L/C& edad, nombre, apellido @453 tabla1 %45.* B) edad,nombre, apellido"
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$ C " tiene " C &BL#"edad"$
6
&BL.3ove1e8t
Loop
/ntonces el 2ormato es( %45.* B) e8presion1, e8presi"nE, ..., e8presi"n1.
3*54&A1&/( &odas las e8presiones deben coincidir con lo ! pusimos en :/L/C&. *or lo tanto
lo siguiente no 2unciona(
:>L ; ":/L/C& B @453 tabla1 %45.* B) edad,nombre, apellido"
9no se puede agrupar mediante los campos seleccionados con B
:>L ; ":/L/C& edad @453 tabla1 %45.* B) apellido"
:>L ; ":/L/C& nombre, apellido, edad @453 tabla1 %45.* B) edad"
HAVING
Asi como la cl?usula A+/4/ especi2ica condiciones para la selecci"n de registros, +A01%
especi2ica condiciones para el agrupamiento #%45.* B)$. *or lo tanto +A01% 2unciona solo si
se especi2ica un %45.* B).
:>L ; ":/L/C& edad, nombre, apellido @453 tabla1 %45.* B) edad,nombre, apellido
+A01% edadN6H"
Con este ejemplo agrupamos segGn la edad, pero solo los ! su campo edad es menos a 6H.
UNION
Con este operador lo ! 'acemos es juntar dos resultados de dos sentencias :/L/C& di2erentes.
/l resultado de la union son todos los registros devueltos en ambas sentencias, y los registros
repetidos se omiten a no ser ! utilicemos la palabra ALL.
La 2orma es( :/L/C& sentencia1 .151 ALL :/L/C& sentenciaE 9sentencia1 debe coincidir
con sentenciaE.
0eamos ! sucede si 'acemos lo siguiente
:>L ; ":/L/C& B @453 tabla1 UNION :/L/C& B @453 tabla1"
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$ C " tiene " C &BL#"edad"$
&BL.3ove1e8t
Loop
/n este caso unimos la tabla1 con la misma tabla1, por lo tanto todos los resultados son
repetidos y se omiten.
0eamos ! pasa con ALL
:>L ; ":/L/C& B @453 tabla1 UNION ALL :/L/C& B @453 tabla1"
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$ C " tiene " C &BL#"edad"$
&BL.3ove1e8t
Loop
5tra ve= todos los datos se repiten pero en este caso le decimos ! no omita ninguno, por lo
tanto cada valor de la tabla1 estar? repetido dos veces.
+acer esto no tiene sentido, es decir ! la union deberDa ser con la selecci"n de dos tablas
di2erentes.
ORDER BY
*ara ordenar los resultados utili=amos 54D/4 B). Cuando omitimos esta cl?usula, los
resultados se ordenan por el primer campo !ue sea clave en el Dndice !ue se 'aya utili=ado.
0eamos las siguientes sentencias(
:>L ; ":/L/C& B @453 tabla1 54D/4 B) edad A:C" 9 ordenado por edad en 2orma
ascendente
:>L ; ":/L/C& B @453 tabla1 54D/4 B) edad" 9 ordenado por edad, por de2ecto lo
ordena en 2orma ascendente
:>L ; ":/L/C& B @453 tabla1 54D/4 B) edad D/:C" 9 ordenado por edad en 2orma
descendente
:>L ; ":/L/C& B @453 tabla1 54D/4 B) 1" 9ordenado por el primer campo de la
tabla
7
:>L ; ":/L/C& nombre, apellido, edad @453 tabla1 54D/4 B) 6,E,1" 9ordenado por
edad, apellido y nombre
/ntonces podemos indicar el nombreFdeFcampo, nGmeroFdeFcampo y si es A:Cendente o
D/:Cendente.
CONSULTAS A MAS DE UNA TABLA
:upongamos ! tenemos una base de datos con dos tablas llamadas tabla1 y tablaE. &abla1
tiene como campos nombre, apellido y edad. 3ientras ! la tablaE tiene nombre y email.
Bien, por ejemplo yo podria !uerer los emails de las personas ! estan en ambas tablas, esto es
! el nombre de la tabla1 tiene ! ser igual al nombre de la tablaE.
0eamos como lo indicamos...
:>L ; ":/L/C& tabla1.nombre,email @453 tabla1,tablaE A+/4/
tabla1.nombre;tablaE.nombre"
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"email"$
&BL.3ove1e8t
Loop
1uestra sentencia :>L !uedo asD(
1. ndicamos los campos a seleccionar #:/L/C&$. 5bservar ! el campo nombre aparece en
las dos tablas, por lo tanto debemos indicar de ! tabla los voy a seleccionar
#tabla1.nombre$. *or el contrario el campo email solo aparece en la tablaE, por lo tanto
no 'ace 2alta indicarle de ! tabla lo !ueremos ya ! es obvio de cual va a ser.
E. Despues indicamos cuales tablas van a ser consultadas #@453$. Le indicamos ! tabla1,
tablaE. /l orden es importante por! de cada registro de la primer tabla se e2ectua una
bus!ueda en la segunda.
6. por ultimo indicamos la condici"n #A+/4/$. Decimos ! el campo nombre de la tabla1
debe ser igual al de la tablaE.
A'ora vamos a ver el mismo ejemplo pero usando ALA:. .n alias es un nombre temporal ! le
asignamos a una tabla. *or ejemplo a la tabla1 la podemos llamar t1 y a la tablaE tE. De esta
manera es mas 2acil escribir t1 ! tabla1.
:>L ; ":/L/C& t1.nombre,email @453 tabla1 t1,tablaE tE A+/4/
t1.nombre;tE.nombre"
/n el @453 escribimos nombreFtabla aliasFtabla. /n el resto de la sentencia usamos el alias en
ve= de el nombre.
A'ora, supongamos ! tenemos una tercer tabla ! contiene nombre y tele2ono como campos.
>ueremos consultar los campos nombre, email y tele2onos.
:>L ; ":/L/C& t1.nombre,email,tele2ono @453 tabla1 t1,tablaE tE, tabla6 t6 A+/4/
t1.nombre ; tE.nombre A1D t1.nombre ; t6.nombre"
Lo importante de estas consultas es el orden en ! se escriben las tablas luego del @453, ya !
esto va a in2luir en la velocidad de la consulta.
*ara terminar la secci"n de consultas vamos a ver las :/L/C& A1DADA:. /sto es una :/L/C&
dentro de otra. /s muy simple. 0eamos un ejemplo.
:>L ; ":/L/C& t1.nombre,email,tele2ono @453 tabla1 t1,tablaE tE, tabla6 t6 A+/4/
t1.nombre ; tE.nombre A1D t1.nombre ; t6.nombre A1D #:/L/C& C5.1&#B$ @453
tabla1$N 1HH"
/s la misma condici"n anterior solo ! se agrego una condici"n mas( #:/L/C& C5.1&#B$ @453
tabla1$N 1HH, esto es, ! la tabla1 tenga menos de 1HH registros. /ntonces cuando insertamos
una nueva :/L/C& dentro de otra, debemos ponerla entre parentesis.
ORDENES PARA MODIFICAR DATOS
.*DA&/
1:/4& 1&5
D/L/&/


8


UPDATE
*odemos cambiar los datos ! !ueramos en la tabla ! !ueramos mediante la orden .*DA&/. *or
ejemplo, en la tabla1, donde teniamos nombre, apellido y edad. :upongamos ! !ueremos !
todas las edades se pongan a H #cero$.
*rivate :ub @ormFLoad#$
Dim BDD As Database
Dim &BL As 4ecordset
Dim :>L As :tring
:et BDD ; 5penDatabase#"c(<mis documentos<base1.mdb"$
SQL = "UPDATE t!"# SET $%% = &"
BDD'E($)*t$ SQL
:>L ; ":/L/C& B @453 tabla1"
:et &BL ; BDD.5pen4ecordset#:>L$
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$ C " tiene " C &BL#"edad"$
&BL.3ove1e8t
Loop
&BL.Close
BDD.Close
/nd :ub
/n este caso cambiamos la manera de trabajar, o mejor dic'o, para la orden .*DA&/
trabajamos directamente sobre el objeto Database ! almacena la base de datos donde
!ueremos reali=ar el cambio. *ara ejecutar una sentencia :>L podemos poner
nombreFvariableFdatabase.E($)*t$ "sentenciaF:>L"
0eamos nuestra sentencia( actuali=ar #.*DA&/$ de la tabla1 las edades, ponerlas a cero #:/&
edad;H$.
&ambien podemos utili=ar la orden A+/4/ para especi2icar algo mas preciso. *or ejemplo
poner a cero las edades ! sean mayores ! E1.
:>L ; ".*DA&/ tabla1 :/& edad ; H A+/4/ edad-E1"
INSERT INTO
&ambien podemos insertar nuevos registros. *ara ello utili=amos la orden 1:/4& 1&5.
0eamos un ejemplo. /n la tabla1 tengo los campos nombre, apellido y edad. Bien, a'ora !uiero
agregar un nuevo nombre, apellido y edad.
:>L ; "1:/4& 1&5 tabla1 #nombre,apellido,edad$ 0AL./:#9damian9,9sotto9,EE$"
BDD./8ecute :>L
Bien, primero decimos insertar en la tabla1 #1:/4& 1&5 tabla1$ nuevos valores para los
campos #nombre, apellido,edad$ los valores son para el primer campo damian, para el segundo
sotto y para el tercero EE.
/n 0AL./: se escriben los valores de los campos en el mismo orden en ! se especi2icaron. Los
caracteres van entre 9 9 y las 2ec'as entre OP. :i no especi2icamos valores entonces el campo
!ueda vacio. *ero si o si debe 'aber un valor para poder crear un nuevo registro.
Bueno, ya sabemos como actuali=ar datos y como agregar datos. A'ora nos 2alta como eliminar
datos.
DELETE
/sta sentencia se utili=a para borrar los registros de una tabla. La sentencia es D/L/&/ @453
nombreFtabla A+/4/ condiciones.
:>L ; "D/L/&/ @453 tabla1 A+/4/ edadNE1"
BDD./8ecute :>L
Con esta sentencia borro todos los registros cuya edad sea menor a E1.
:i no especi2ico un A+/4/, se borran todos los registros, o sea, la tabla me !ueda vacia.

:>L ; "D/L/&/ @453 tabla1"
BDD./8ecute :>L
9
A'ora, si la tabla esta vacia, cuando 'agamos una bus!ueda dentro de ella el programa va a
dar error. .na soluci"n serDa(
:>L ; ":/L/C& B @453 tabla1"
:et &BL ; BDD.5pen4ecordset#:>L$
I+ TBL'EOF T,$- 99/5@ esta en verdaero si no 'ay datos
M./B0( "N0 ,y %t0. 1*$ )02-)2%- )0- " !3.1*$% $.4$)2+2)%"
E(2t S*!
E-% I+
9si llega 'asta aca es por! 'ay datos
&BL.3ove@irst
Do .ntil &BL./5@
List1.Addtem &BL#"nombre"$ C " " C &BL#"apellido"$ C " tiene " C &BL#"edad"$
&BL.3ove1e8t
Loop
&BL.Close
BDD.Close

You might also like