Sei sulla pagina 1di 7

5.

4 Usar Objetos de Acceso a Datos


Los Objetos de acceso a datos (DAO) son una serie de objetos que le permiten
tener acceso y manipular datos mediante programacin en bases de datos locales o
remotas. Puede utilizar DAO para administrar bases de datos, as como sus objetos y
su estructura.
En esta seccin aprender a utilizar DAO para recuperar y usar datos de una base de
datos.
!.".# $ntroduccin
Para tener acceso y manipular datos mediante programa debe comprender la
jerarqua de DAO.
El orden de los objetos en DAO se conoce como su modelo de objetos. El modelo de
objetos de DAO le permite escribir cdigo que puede apro%ec&ar la 'uncionalidad de
la base de datos.
El Modelo de Objetos de DAO
El modelo de objetos de DAO de'ine la jerarqua de los objetos DAO. Para incorporar
a una aplicacin la 'uncionalidad de DAO, debe ser capaz de e(poner un objeto
dentro de esta jerarqua.

A continuacin se muestra ilustracin que re'leja el modelo de objetos de DAO.












Deber utilizar esta jerarqua cuando cree o tenga acceso a determinados objetos.
Por ejemplo, la instruccin siguiente abre una base de datos)
*et db+ydb , D-Engine..or/spaces012.OpenDatabase03+ibd.mdb32
En la tabla siguiente se enumeran algunos de los Objetos de acceso a datos y se
describe su uso.
Objeto Descripcin
Workspace 4ontiene las bases de datos abiertas.
Database 5na base de datos abierta.
Recordset Los registros de una tabla o los registros que resultan de
ejecutar una consulta.
QueryDe 5na de'inicin almacenada de una consulta.
!ableDe 5na de'inicin almacenada de una tabla.
"os Objetos D#En$ine y Workspace
Objeto D#En$ine
D#En$ine es el objeto de ni%el superior dentro del modelo de objetos DAO.
4ontiene y controla todos los dems objetos de la jerarqua de DAO.

Objeto Workspace
El objeto Workspace de'ine una sesin para el usuario y determina cmo interact6a
su aplicacin con los datos. *i abre una base de datos sin especi'icar un objeto
Workspace, se utilizar D#En$ine.Workspaces%&' como %alor predeterminado.
!.".7 8rabajar con 9ecordsets
5n objeto Recordset contiene un conjunto de registros de una base de datos. Puede
utilizar el objeto Recordset para recuperar mediante programa in'ormacin de la
base de datos.
En esta seccin se e(plica cmo crear y utilizar 9ecordsets.
Abrir una #ase de Datos
El primer paso para crear una aplicacin de base de datos consiste en abrir la base
de datos. Deber declarar una %ariable como un objeto Database y despu:s utilizar
el m:todo OpenDatabase para abrir la base de datos.
Declaracin de la base de datos
La %ariable de objeto Database se re'iere a su base de datos. 5tilice la instruccin
(et para asignarla a una base de datos.
El siguiente ejemplo de cdigo abre una base de datos en el espacio de trabajo
predeterminado)
Dim db+ydb As Database
*et db+ydb , OpenDatabase 034);Arc&i%os de
programa;De%*tudio;<-;=>ind.mdb32
M)todo OpenDatabase
El m:todo OpenDatabase acepta los argumentos siguientes)
Ar$u*ento +ropsito
Base_datos 4adena que especi'ica el nombre de una base de datos e(istente.
Opciones Para un espacio de trabajo de +icroso't ?et, !rue o ,alse. *i abre
una base de datos con el argumento opciones 8rue, ning6n otro
usuario podr abrir la base de datos. El %alor predeterminado es
,alse.
Slo_lectura !rue o ,alse. *i es !rue, no se permite realizar ninguna
modi'icacin. El %alor predeterminado es ,alse.
Conexin 4adena que especi'ica di%ersa in'ormacin de cone(in, incluyendo
contrase@as.
Puede mejorar el rendimiento si abre una base de datos para uso e(clusi%o si no &ay
%arios usuarios.
M)todo -lose
4uando &aya terminado de trabajar con una base de datos, ci:rrela con el m:todo
-lose, como en el ejemplo siguiente)
db+ydb.4lose
-rear un Recordset
5na %ez que &aya abierto una base de datos, puede manipular los datos
almacenados en la misma si crea un 9ecordset. Declare una %ariable como un objeto
Recordset y utilice el m:todo OpenRecorset para crear el 9ecordset.
Declaracin de Recordset
La %ariable de objeto Recordset &ace re'erencia a su 9ecordset. 5tilice la
instruccin (et para asignarla a un 9ecordset.
El siguiente ejemplo de cdigo abre una base de datos y crea un 9ecordset)
Dim db+ydb As Database
Dim recEmployees As 9ecordset
*et db+ydb , OpenDatabase A
034);Arc&i%os de programa;De%*tudio;<-;=>ind.mdb32
*et recEmployees , db+ydb.Open9ecordset 03Empleados32
M)todo OpenRecordset
En la tabla siguiente se enumeran y describen los argumentos del m:todo
OpenRecordset.
Ar$u*ento Descripcin
Origen Especi'ica el origen del 9ecordset. El origen es una cadena que indica
un nombre de tabla, un nombre de consulta o una instruccin *BL.
Tipo El tipo de objeto del 9ecordset que se %a a crear, como dbOpen8able,
dbOpenDynaset o dbOpen*naps&ot.
Opciones Determina cmo se abre el 9ecordset. Por ejemplo, puede abrir un
9ecordset y permitir el desplazamiento slo &acia delante por el
mismo con la opcin dbCor>ardOnly.
Ediciones Determina el bloqueo del 9ecordset. Por ejemplo, si especi'ica
dbPessimistic para el argumento ediciones, el 9ecordset se bloquear
durante la modi'icacin.
El desplazamiento por los 9ecordsets se basa en el concepto de un registro actual.
*uponga que el registro actual es un determinado registro que est resaltado por un
cursor in%isible a medida que se desplaza por el 9ecordset.
M)todos de despla.a*iento
5tilice los m:todos Mo/e para desplazarse por los registros de un 9ecordset)
+ropiedades del despla.a*iento
El objeto Recordset o'rece propiedades que puede utilizar mientras se desplaza por
un 9ecordset.

Record-ount
La propiedad Record-ount de un 9ecordset de tipo table siempre re'leja 'ielmente
el n6mero de registros de la tabla y se %e a'ectada inmediatamente cuando alg6n
usuario agrega o elimina un registro.
0ota1 Puede utilizar la 'uncin -ount de *BL para determinar el n6mero de
registros de un 9ecordset. Por ejemplo, *elect 4ount 0D2 Crom Empleados de%uel%e
el n6mero de registros de la tabla Empleados.
Absolute+osition
La propiedad Absolute+osition de%uel%e o establece el n6mero relati%o del registro
actual de un 9ecordset. Absolute+osition es relati%o a 1 0es decir, el primer
registro de un 9ecordset es el registro 12. *i asigna a Absolute+osition el %alor E,
el cuarto registro ser el registro actual.
#ook*ark
La propiedad Absolute+osition de un registro puede cambiar a medida que se
agregan y eliminan registros de un 9ecordset. Para %ol%er a un registro espec'ico,
utilice la propiedad #ook*ark.
!.".E +odi'icar Datos
5na %ez que &aya creado un 9ecordset, puede utilizar los m:todos del objeto
Recordset para actualizar, agregar y eliminar registros. En esta seccin se e(plica
cmo actualizar, agregar y eliminar datos desde una base de datos de +icroso't ?et
Actuali.ar Re$istros
Para actualizar un registro primero debe in%ocar al m:todo Edit, llenar los campos
del registro con los datos apropiados y, despu:s, in%ocar al m:todo Update.
*i ejecuta el m:todo Update sin utilizar primero el m:todo Edit, se producir un
error de tiempo de ejecucin.
+ropiedad EditMode del Recordset
Puede comprobar la propiedad EditMode para determinar si se &an ejecutado los
m:todos Edit o Add0e2. Esto puede resultar 6til en un comando 3uardar que
ejecute un m:todo Update inmediatamente, si ya se &a ejecutado un m:todo AddF
o cuando ejecute el m:todo Edit seguido del m:todo Update si el usuario est
modi'icando el registro actual.
En la tabla siguiente se describen las constantes que indican el estado de
modi'icacin del registro actual.
-onstante Descripcin
DbEdit=one *i no est realizndose ninguna operacin de edicin.
DbEdit$nProgress *i se &a llamado al m:todo Edit y el registro actual est en el b6'er
de copia.
DbEditAdd *i se &a llamado al m:todo Add=e> y el registro actual del b6'er
de copia es un registro nue%o que no se &a guardado en la base de
datos.

A$re$ar Re$istros
5tilice el m:todo Add0e2 para agregar un nue%o registro al 9ecordset. El registro
no se guardar realmente en la base de datos &asta que ejecute el m:todo Update.
-ancelar un *)todo Add
5tilice el m:todo -ancelUpdate para cancelar el m:todo Add0e2 o Edit de 'orma
que no se realicen los cambios a una base de datos.
Eli*inar Re$istros
5tilice el m:todo Delete para quitar el registro actual de un 9ecordset. =o se
mostrar ninguna ad%ertencia o peticin. Puede agregar un mensaje de ad%ertencia
en la rutina de la eliminacin si es necesario.
La eliminacin de un registro no pro%oca automticamente que el registro siguiente
pase a ser el registro actual. Para que el registro siguiente se con%ierta en el registro
actual debe utilizar el m:todo Mo/e0e4t.
Usar DAO con el -ontrol Data
En una misma aplicacin puede combinar DAO y el control Data. Esto es 6til si
desea utilizar controles enlazados en una aplicacin y seguir teniendo la misma
'le(ibilidad de uso que o'rece DAO.
La propiedad Recordset del control Data de%uel%e un objeto Recordset.
!."." -uscar 9egistros
En esta seccin se describe cmo utilizar uno de los m:todos ,ind o el m:todo (eek
para buscar datos en un 9ecordset.
#uscar en un Dynaset o un (naps5ot
Puede utilizar los m:todos ,ind,irst, ,ind"ast, ,ind0e4t y ,ind+re/ious para
encontrar un registro en un dynaset o en un snaps&ot.
El criterio de b6squeda que especi'ique debe ser equi%alente a una instruccin
W5ere de *BL, sin la palabra cla%e W5ere.
#uscar en una !abla
5tilice el m:todo (eek para buscar un registro en un 9ecordset de tipo table. El
9ecordset debe tener de'inido un ndice antes de poder utilizar el m:todo (eek. En
la tabla siguiente se describen las posibles comparaciones que puede utilizar con el
m:todo (eek.
-adena de
co*paracin
Descripcin
3,3 $gual que los %alores de cla%e especi'icados.
3G3 +ayor que los %alores de cla%e especi'icados.
3G,3 +ayor o igual que los %alores de cla%e
especi'icados.
3H,3 +enor o igual que los %alores de cla%e
especi'icados.
3H3 +enor que los %alores de cla%e especi'icados.
5tilice %arias cla%es para los ndices que tienen %arios campos.
!.".! 5so de 4onsultas
En esta seccin se e(plica el uso de consultas almacenadas e instrucciones *BL para
%er o modi'icar datos en una base de datos.
Usar una -onsulta de (eleccin
Para utilizar una consulta de seleccin almacenada, basta con proporcionar el
nombre de la consulta en el m:todo OpenRecordset del objeto Database. El
siguiente ejemplo de cdigo crea un 9ecordset basado en una consulta de seleccin
almacenada)
*et recProducts , db+ydb.Open9ecordset03Productos
pedidos32
8ambi:n puede utilizar el m:todo OpenRecordset del objeto QueryDe para
recuperar los resultados de la consulta. El siguiente ejemplo de cdigo crea un
9ecordset con un objeto QueryDe basado en una consulta de seleccin
almacenada)
Dim qryProducts As BueryDe'
*et qryProducts , db+ydb.BueryDe's03Productos
pedidos32
*et recProducts , qryProducts.Open9ecordset
Establecer un par6*etro
*i la consulta almacenada requiere parmetros, utilice la coleccin +ara*eters del
objeto QueryDe para establecer parmetros. El cdigo siguiente establece un
parmetro a una consulta almacenada)
*et qryProducts.Parameters03Cec&a de inicio32 , A
4Date0t(t-eginDate.te(t2
-rear una consulta nue/a
5tilice el m:todo -reateQueryDe del objeto Database para crear una nue%a
consulta en tiempo de ejecucin y almacenar la consulta en una base de datos. El
siguiente cdigo de ejemplo crea y almacena una consulta nue%a)
*et qry=e>Buery , db+ydb.4reateBueryDe' A
03+i consulta3, 3*elect D Crom Empleados32
Usar una -onsulta de Acciones
5na consulta de acciones es una instruccin *BL que actualiza, elimina o inserta
registros en una base de datos. 5na consulta de acciones no de%uel%e ninguna 'ila.
5tilice el m:todo E4ecute del objeto Database para ejecutar una consulta de
acciones. El siguiente ejemplo ejecuta una consulta de acciones y muestra el n6mero
de registros a'ectados)
db+ydb.E(ecute 3Actualizar productos3, dbCailOnError
+sgbo( 3Esta consulta cambi 3 I A
db+ydb.9ecordsA''ected I A
3 registros.3
5tilice la opcin db,ailOnError para &acer que el m:todo E4ecute de%uel%a un
error de tiempo de ejecucin si alguno de los registros a'ectados est bloqueado o
no se puede actualizar o eliminar.

La propiedad RecordsAected de%uel%e el n6mero de registros que se modi'icaron,
insertaron o eliminaron.
8ambi:n puede utilizar un objeto QueryDe para ejecutar una consulta de acciones.
*i la consulta requiere parmetros, utilice la coleccin +ara*eters del objeto
QueryDe para establecer los parmetros, como se muestra en este ejemplo)
Dim qry5pdate As BueryDe'
*et qry5pdate , db.BueryDe's03Actualizar precios32
qry5pdate.Parameters 03Escribir aumento32 , .#1
qry5pdate.E(ecute dbCailOnError
+sgbo( qry5pdate.9ecordsA''ected
7ntroduccin a (Q"
Puede utilizar *BL para recuperar 6nicamente un subconjunto de 'ilas o para
recuperar in'ormacin de dos tablas a la %ez. *BL le permite especi'icar e(actamente
qu: registros desea recuperar y en qu: orden.
*i &ay un error en la instruccin *BL 0por ejemplo, si especi'ica un nombre de
campo no %lido2, aparecer un mensaje de error de tiempo de ejecucin similar a
De*asiados pocos par6*etros. (e esperaban 8. *i recibe este error,
compruebe la cadena *BL y aseg6rese de que los nombres del campo y de la tabla
que &a indicado son %lidos.
(inta4is de (E"E-! de (Q"
5tilice la instruccin (E"E-! de *BL para recuperar registros. La sinta(is de (E"E-!
es la siguiente)
(E"E-! lista_campos
,ROM nombres_tabla
W9ERE condiciones_bsqueda
ORDER #: lista_campos
El ejemplo de cdigo siguiente recupera 6nicamente los campos Apellidos e
$dEmpleado en los que $dEmpleado es mayor que !. Los registros se recuperan en
orden descendente seg6n el $d. de empleado)
*ELE48 JApellidosK, J$dEmpleadoK
C9O+ Empleados
.LE9E J$dEmpleadoK G !
O9DE9 -M J$dEmpleadoK DE*4

W9ERE
5tilice la clusula W9ERE para limitar la seleccin. El signo de n6mero 0N2 indica
%alores literales de 'ec&a. Los %alores literales de 'ec&a especi'icados en una
instruccin *BL deben tener el 'ormato de 'ec&a de EE.55. 0por ejemplo, el O de
mayo de #OOP se escribe como !QOQOP2.
ORDER #:
5tilice la clusula ORDER #: para crear un 9ecordset en un orden determinado. La
opcin A(- indica orden ascendente y DE(- indica orden descendente. El siguiente
ejemplo de cdigo selecciona todos los campos de la tabla Empleados, ordenados
por apellido)
*ELE48 D C9O+ Empleados O9DE9 -M JApellidosK DE*4
Usar (E"E-! con *;ltiples tablas
Puede utilizar una operacin de combinacin con el 'in de combinar registros
procedentes de m6ltiples tablas. Por ejemplo, si quiere mostrar nombres de
categora y nombres de producto de distintas tablas, puede combinar registros de la
tabla 4ategoras y de la tabla Productos.
La clusula 700ER <O70 especi'ica que desea obtener los registros de la tabla
4ategoras cuyo $d. de categora coincida con el mismo $d4ategora en la tabla
Productos. El siguiente ejemplo de cdigo combina in'ormacin de la tabla
4ategoras y la tabla Productos)
str*BL , 3*ELE48 4ategoras.J=ombre4ategoraK, 3 I A
3Productos.J=ombreProductoK 3 I A
3C9O+ 4ategoras 3 I A
3$==E9 ?O$= Productos O= 3 I A
3Productos.J$d4ategoraK , 4ategoras.J$d4ategoraK3
A continuacin %eamos una ilustracin que muestra el resultado de la operacin de
combinacin.


Usar (Q"
En general, es ms e'icaz utilizar una consulta almacenada que crear una instruccin
*BL en tiempo de ejecucin.
7nstruccin (E"E-! de (Q"
Puede crear dinmicamente una cadena *BL en tiempo de ejecucin y utilizar el
m:todo OpenRecordset para crear un 9ecordset basado en la instruccin *BL. Por
ejemplo)
Dim str*BL As *tring
str*BL , 3*elect D Crom Empleados3
*et recEmployees , db+ydb.Open9ecordset 0str*BL2
7nstruccin U+DA!E de (Q"
La instruccin Update de *BL modi'ica registros e(istentes. La opcin
db,ailOnError &ace que la actualizacin se des&aga si se produce un error durante
la actualizacin. Adems, se in%oca al controlador de errores. El cdigo siguiente
ilustra el uso de una instruccin Update de *BL)

str*BL , 35PDA8E JDetalles de pedidosK *E8 JDescuentoK , # 3 I A
3.LE9E JDescuentoK , 13
db+ydb.E(ecute str*BL, dbCailOnError
7nstruccin 70(ER! de (Q"
Puede utilizar la instruccin 7nsert de *BL para insertar un nue%o registro. <eamos
cdigo de ejemplo que inserta un registro en la tabla Empleados.
str*BL , 3$=*E98 $=8O E+PLEADO* 3 I A
30J=ombreK, JApellidosK2 3 I A
3<AL5E* 0R?uanR, RSraciaR23
db+ydb.E(ecute str*BL, dbCailOnError

Potrebbero piacerti anche