canal visual basic .net

Recursos Visual Basic.NET, VB.NET, Manuales de programación, Tutoriales, Foros de programación, Comunidad de programadores

Usuarios activos:  131

Manuales : Acceso a datos

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 programación en bases de datos locales o remotas. Puede utilizar DAO para administrar bases de datos, así como sus objetos y su estructura.

En esta sección aprenderá a utilizar DAO para recuperar y usar datos de una base de datos.

5.4.1 Introducción

Para tener acceso y manipular datos mediante programa debe comprender la jerarquía 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 código que puede aprovechar la funcionalidad de la base de datos.

El Modelo de Objetos de DAO

El modelo de objetos de DAO define la jerarquía de los objetos DAO. Para incorporar a una aplicación la funcionalidad de DAO, debe ser capaz de exponer un objeto dentro de esta jerarquía.

 

A continuación se muestra ilustración que refleja el modelo de objetos de DAO.

 

 

 

 

 

 

 

 

 

 

 

 

Deberá utilizar esta jerarquía cuando cree o tenga acceso a determinados objetos.

Por ejemplo, la instrucción siguiente abre una base de datos:

Set dbMydb = DBEngine.Workspaces(0).OpenDatabase("Mibd.mdb")

En la tabla siguiente se enumeran algunos de los Objetos de acceso a datos y se describe su uso.

Objeto

Descripción

Workspace

Contiene las bases de datos abiertas.

Database

Una base de datos abierta.

Recordset

Los registros de una tabla o los registros que resultan de ejecutar una consulta.

QueryDef

Una definición almacenada de una consulta.

TableDef

Una definición almacenada de una tabla.

Los Objetos DBEngine y Workspace

  • Objeto DBEngine

DBEngine es el objeto de nivel superior dentro del modelo de objetos DAO. Contiene y controla todos los demás objetos de la jerarquía de DAO.

 

  • Objeto Workspace

El objeto Workspace define una sesión para el usuario y determina cómo interactúa su aplicación con los datos. Si abre una base de datos sin especificar un objeto Workspace, se utilizará DBEngine.Workspaces(0) como valor predeterminado.

5.4.2 Trabajar con Recordsets

Un objeto Recordset contiene un conjunto de registros de una base de datos. Puede utilizar el objeto Recordset para recuperar mediante programa información de la base de datos.

En esta sección se explica cómo crear y utilizar Recordsets.

Abrir una Base de Datos

El primer paso para crear una aplicación de base de datos consiste en abrir la base de datos. Deberá declarar una variable como un objeto Database y después utilizar el método OpenDatabase para abrir la base de datos.

  • Declaración de la base de datos

La variable de objeto Database se refiere a su base de datos. Utilice la instrucción Set para asignarla a una base de datos.

El siguiente ejemplo de código abre una base de datos en el espacio de trabajo predeterminado:

Dim dbMydb As Database

Set dbMydb = OpenDatabase ("C:Archivos de programaDevStudioVBNwind.mdb")

  • Método OpenDatabase

El método OpenDatabase acepta los argumentos siguientes:

Argumento

Propósito

Base_datos

Cadena que especifica el nombre de una base de datos existente.

Opciones

Para un espacio de trabajo de Microsoft Jet, True o False. Si abre una base de datos con el argumento opciones True, ningún otro usuario podrá abrir la base de datos. El valor predeterminado es False.

Sólo_lectura

True o False. Si es True, no se permite realizar ninguna modificación. El valor predeterminado es False.

Conexión

Cadena que especifica diversa información de conexión, incluyendo contraseñas.

Puede mejorar el rendimiento si abre una base de datos para uso exclusivo si no hay varios usuarios.

  • Método Close

Cuando haya terminado de trabajar con una base de datos, ciérrela con el método Close, como en el ejemplo siguiente:

dbMydb.Close

Crear un Recordset

Una vez que haya abierto una base de datos, puede manipular los datos almacenados en la misma si crea un Recordset. Declare una variable como un objeto Recordset y utilice el método OpenRecorset para crear el Recordset.

  • Declaración de Recordset

La variable de objeto Recordset hace referencia a su Recordset. Utilice la instrucción Set para asignarla a un Recordset.

El siguiente ejemplo de código abre una base de datos y crea un Recordset:

Dim dbMydb As Database

Dim recEmployees As Recordset

Set dbMydb = OpenDatabase _

("C:Archivos de programaDevStudioVBNwind.mdb")

Set recEmployees = dbMydb.OpenRecordset ("Empleados")

  • Método OpenRecordset

En la tabla siguiente se enumeran y describen los argumentos del método OpenRecordset.

Argumento

Descripción

Origen

Especifica el origen del Recordset. El origen es una cadena que indica un nombre de tabla, un nombre de consulta o una instrucción SQL.

Tipo

El tipo de objeto del Recordset que se va a crear, como dbOpenTable, dbOpenDynaset o dbOpenSnapshot.

Opciones

Determina cómo se abre el Recordset. Por ejemplo, puede abrir un Recordset y permitir el desplazamiento sólo hacia delante por el mismo con la opción dbForwardOnly.

Ediciones

Determina el bloqueo del Recordset. Por ejemplo, si especifica dbPessimistic para el argumento ediciones, el Recordset se bloqueará durante la modificación.

El desplazamiento por los Recordsets se basa en el concepto de un registro actual. Suponga que el registro actual es un determinado registro que está resaltado por un cursor invisible a medida que se desplaza por el Recordset.

  • Métodos de desplazamiento

Utilice los métodos Move para desplazarse por los registros de un Recordset:

  • Propiedades del desplazamiento

El objeto Recordset ofrece propiedades que puede utilizar mientras se desplaza por un Recordset.

 

  • RecordCount

La propiedad RecordCount de un Recordset de tipo table siempre refleja fielmente el número de registros de la tabla y se ve afectada inmediatamente cuando algún usuario agrega o elimina un registro.

Nota: Puede utilizar la función Count de SQL para determinar el número de registros de un Recordset. Por ejemplo, Select Count (*) From Empleados devuelve el número de registros de la tabla Empleados.

  • AbsolutePosition

La propiedad AbsolutePosition devuelve o establece el número relativo del registro actual de un Recordset. AbsolutePosition es relativo a 0 (es decir, el primer registro de un Recordset es el registro 0). Si asigna a AbsolutePosition el valor 3, el cuarto registro será el registro actual.

  • Bookmark

La propiedad AbsolutePosition de un registro puede cambiar a medida que se agregan y eliminan registros de un Recordset. Para volver a un registro específico, utilice la propiedad Bookmark.

5.4.3 Modificar Datos

Una vez que haya creado un Recordset, puede utilizar los métodos del objeto Recordset para actualizar, agregar y eliminar registros. En esta sección se explica cómo actualizar, agregar y eliminar datos desde una base de datos de Microsoft Jet

Actualizar Registros

Para actualizar un registro primero debe invocar al método Edit, llenar los campos del registro con los datos apropiados y, después, invocar al método Update.

Si ejecuta el método Update sin utilizar primero el método Edit, se producirá un error de tiempo de ejecución.

  • Propiedad EditMode del Recordset

Puede comprobar la propiedad EditMode para determinar si se han ejecutado los métodos Edit o AddNew. Esto puede resultar útil en un comando Guardar que ejecute un método Update inmediatamente, si ya se ha ejecutado un método Add; o cuando ejecute el método Edit seguido del método Update si el usuario está modificando el registro actual.

En la tabla siguiente se describen las constantes que indican el estado de modificación del registro actual.

Constante

Descripción

DbEditNone

Si no está realizándose ninguna operación de edición.

DbEditInProgress

Si se ha llamado al método Edit y el registro actual está en el búfer de copia.

DbEditAdd

Si se ha llamado al método AddNew y el registro actual del búfer de copia es un registro nuevo que no se ha guardado en la base de datos.

 

Agregar Registros

Utilice el método AddNew para agregar un nuevo registro al Recordset. El registro no se guardará realmente en la base de datos hasta que ejecute el método Update.

  • Cancelar un método Add

Utilice el método CancelUpdate para cancelar el método AddNew o Edit de forma que no se realicen los cambios a una base de datos.

Eliminar Registros

Utilice el método Delete para quitar el registro actual de un Recordset. No se mostrará ninguna advertencia o petición. Puede agregar un mensaje de advertencia en la rutina de la eliminación si es necesario.

La eliminación de un registro no provoca automáticamente que el registro siguiente pase a ser el registro actual. Para que el registro siguiente se convierta en el registro actual debe utilizar el método MoveNext.

Usar DAO con el Control Data

En una misma aplicación puede combinar DAO y el control Data. Esto es útil si desea utilizar controles enlazados en una aplicación y seguir teniendo la misma flexibilidad de uso que ofrece DAO.

La propiedad Recordset del control Data devuelve un objeto Recordset.

5.4.4 Buscar Registros

En esta sección se describe cómo utilizar uno de los métodos Find o el método Seek para buscar datos en un Recordset.

Buscar en un Dynaset o un Snapshot

Puede utilizar los métodos FindFirst, FindLast, FindNext y FindPrevious para encontrar un registro en un dynaset o en un snapshot.

El criterio de búsqueda que especifique debe ser equivalente a una instrucción Where de SQL, sin la palabra clave Where.

Buscar en una Tabla

Utilice el método Seek para buscar un registro en un Recordset de tipo table. El Recordset debe tener definido un índice antes de poder utilizar el método Seek. En la tabla siguiente se describen las posibles comparaciones que puede utilizar con el método Seek.

Cadena de comparación

Descripción

"="

Igual que los valores de clave especificados.

">"

Mayor que los valores de clave especificados.

">="

Mayor o igual que los valores de clave especificados.

"<="

Menor o igual que los valores de clave especificados.

"<"

Menor que los valores de clave especificados.

Utilice varias claves para los índices que tienen varios campos.

5.4.5 Uso de Consultas

En esta sección se explica el uso de consultas almacenadas e instrucciones SQL para ver o modificar datos en una base de datos.

Usar una Consulta de Selección

Para utilizar una consulta de selección almacenada, basta con proporcionar el nombre de la consulta en el método OpenRecordset del objeto Database. El siguiente ejemplo de código crea un Recordset basado en una consulta de selección almacenada:

Set recProducts = dbMydb.OpenRecordset("Productos pedidos")

También puede utilizar el método OpenRecordset del objeto QueryDef para recuperar los resultados de la consulta. El siguiente ejemplo de código crea un Recordset con un objeto QueryDef basado en una consulta de selección almacenada:

Dim qryProducts As QueryDef

Set qryProducts = dbMydb.QueryDefs("Productos pedidos")

Set recProducts = qryProducts.OpenRecordset

  • Establecer un parámetro

Si la consulta almacenada requiere parámetros, utilice la colección Parameters del objeto QueryDef para establecer parámetros. El código siguiente establece un parámetro a una consulta almacenada:

Set qryProducts.Parameters("Fecha de inicio") = _

CDate(txtBeginDate.text)

  • Crear una consulta nueva

Utilice el método CreateQueryDef del objeto Database para crear una nueva consulta en tiempo de ejecución y almacenar la consulta en una base de datos. El siguiente código de ejemplo crea y almacena una consulta nueva:

Set qryNewQuery = dbMydb.CreateQueryDef _

("Mi consulta", "Select * From Empleados")

Usar una Consulta de Acciones

Una consulta de acciones es una instrucción SQL que actualiza, elimina o inserta registros en una base de datos. Una consulta de acciones no devuelve ninguna fila. Utilice el método Execute del objeto Database para ejecutar una consulta de acciones. El siguiente ejemplo ejecuta una consulta de acciones y muestra el número de registros afectados:

dbMydb.Execute "Actualizar productos", dbFailOnError

Msgbox "Esta consulta cambió " & _

dbMydb.RecordsAffected & _

" registros."

Utilice la opción dbFailOnError para hacer que el método Execute devuelva un error de tiempo de ejecución si alguno de los registros afectados está bloqueado o no se puede actualizar o eliminar.

 

La propiedad RecordsAffected devuelve el número de registros que se modificaron, insertaron o eliminaron.

También puede utilizar un objeto QueryDef para ejecutar una consulta de acciones. Si la consulta requiere parámetros, utilice la colección Parameters del objeto QueryDef para establecer los parámetros, como se muestra en este ejemplo:

Dim qryUpdate As QueryDef

Set qryUpdate = db.QueryDefs("Actualizar precios")

qryUpdate.Parameters ("Escribir aumento") = .10

qryUpdate.Execute dbFailOnError

Msgbox qryUpdate.RecordsAffected

Introducción a SQL

Puede utilizar SQL para recuperar únicamente un subconjunto de filas o para recuperar información de dos tablas a la vez. SQL le permite especificar exactamente qué registros desea recuperar y en qué orden.

Si hay un error en la instrucción SQL (por ejemplo, si especifica un nombre de campo no válido), aparecerá un mensaje de error de tiempo de ejecución similar a Demasiados pocos parámetros. Se esperaban 2. Si recibe este error, compruebe la cadena SQL y asegúrese de que los nombres del campo y de la tabla que ha indicado son válidos.

  • Sintaxis de SELECT de SQL

Utilice la instrucción SELECT de SQL para recuperar registros. La sintaxis de SELECT es la siguiente:

SELECT lista_campos

FROM nombres_tabla

WHERE condiciones_búsqueda

ORDER BY lista_campos

El ejemplo de código siguiente recupera únicamente los campos Apellidos e IdEmpleado en los que IdEmpleado es mayor que 5. Los registros se recuperan en orden descendente según el Id. de empleado:

SELECT [Apellidos], [IdEmpleado]

FROM Empleados

WHERE [IdEmpleado] > 5

ORDER BY [IdEmpleado] DESC

  • WHERE

Utilice la cláusula WHERE para limitar la selección. El signo de número (#) indica valores literales de fecha. Los valores literales de fecha especificados en una instrucción SQL deben tener el formato de fecha de EE.UU. (por ejemplo, el 9 de mayo de 1996 se escribe como 5/9/96).

  • ORDER BY

Utilice la cláusula ORDER BY para crear un Recordset en un orden determinado. La opción ASC indica orden ascendente y DESC indica orden descendente. El siguiente ejemplo de código selecciona todos los campos de la tabla Empleados, ordenados por apellido:

SELECT * FROM Empleados ORDER BY [Apellidos] DESC

  • Usar SELECT con múltiples tablas

Puede utilizar una operación de combinación con el fin de combinar registros procedentes de múltiples tablas. Por ejemplo, si quiere mostrar nombres de categoría y nombres de producto de distintas tablas, puede combinar registros de la tabla Categorías y de la tabla Productos.

La cláusula INNER JOIN especifica que desea obtener los registros de la tabla Categorías cuyo Id. de categoría coincida con el mismo IdCategoría en la tabla Productos. El siguiente ejemplo de código combina información de la tabla Categorías y la tabla Productos:

strSQL = "SELECT Categorías.[NombreCategoría], " & _

"Productos.[NombreProducto] " & _

"FROM Categorías " & _

"INNER JOIN Productos ON " & _

"Productos.[IdCategoría] = Categorías.[IdCategoría]"

A continuación veamos una ilustración que muestra el resultado de la operación de combinación.

 

 

Usar SQL

En general, es más eficaz utilizar una consulta almacenada que crear una instrucción SQL en tiempo de ejecución.

  • Instrucción SELECT de SQL

Puede crear dinámicamente una cadena SQL en tiempo de ejecución y utilizar el método OpenRecordset para crear un Recordset basado en la instrucción SQL. Por ejemplo:

Dim strSQL As String

strSQL = "Select * From Empleados"

Set recEmployees = dbMydb.OpenRecordset (strSQL)

  • Instrucción UPDATE de SQL

La instrucción Update de SQL modifica registros existentes. La opción dbFailOnError hace que la actualización se deshaga si se produce un error durante la actualización. Además, se invoca al controlador de errores. El código siguiente ilustra el uso de una instrucción Update de SQL:

 

strSQL = "UPDATE [Detalles de pedidos] SET [Descuento] = 1 " & _

"WHERE [Descuento] = 0"

dbMydb.Execute strSQL, dbFailOnError

  • Instrucción INSERT de SQL

Puede utilizar la instrucción Insert de SQL para insertar un nuevo registro. Veamos código de ejemplo que inserta un registro en la tabla Empleados.

strSQL = "INSERT INTO EMPLEADOS " & _

"([Nombre], [Apellidos]) " & _

"VALUES ('Juan', 'Gracia')"

dbMydb.Execute strSQL, dbFailOnError

 


Visual Studio .VisualBasic.net .ADO.NET .ASP.NET .Framework .Crystal report
[Visual Basic .NET · Información legal · Condiciones de uso · Publicidad · Contacto · RSS novedades Foro · Inicio]
Un sitio web de Internelia (Ontecnia) © Copyright 2010 canalvisualbasic.net. Todos los derechos reservados