You are on page 1of 8

Lenguajes de Programación III - ADO

CUNIVEMSA

ACCESO A DATOS USANDO


ADO (ActiveX Data Object)

El entorno de acceso a base de datos de datos ADO se puede manipular de dos formas, una mediante código
puro y empleando el control ADO. Para efectos de la siguiente guía se hará total énfasis en el manejo mediante
código, debido a su gran versatilidad y la integración con objetos command.

Pasos para manejar el entorno ADO mediante código:


1. Cree un proyecto Estándar en Visual Basic.

2. Agregue al explorador de proyectos un módulo para crear los procedimientos y variables globales.
- Clic derecho sobre el explorador de proyectos
- Dentro de la opción Agregar de clic en Módulo
Un módulo permite colocar código que puede ser ejecutado desde cualquier formulario, siempre y cuando
se establezca la declaración de variables procedimientos u objetos como Global o Public.

3. Agregue al proyecto la referencia del ADO.


- Clic en menú Proyecto luego clic en Referencias….
- En la lista del cuadro de referencias que aparece, busque Microsoft ActiveX Data Object 2.0
Library, y active su casilla para agregarla.
- Luego de clic en aceptar.

4. Abra el modulo que agregó en el punto 2. y cree el siguiente código.


- Creación de una variable Conexión:

Global Cn As ADODB. Connection


Las variables Connectión permiten establecer la cadena de conexión con la base de datos desde la cual se
van a extraer o manipular los datos.

- Creación de una variable Recordset:

Global Rs As ADODB.Recordset

Las Variables Recordset permiten establecer las consultas que extraerán los registros de las tabas de la
base de datos

- Creación del procedimiento de conexión con Access y la cadena de conexión:

Public Sub Conexion( )


Set Cn = New ADODB.Connection
Cn.CursorLocation = adUseClient
Cn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & App.Path & "\MiBaseDato.mdb;"
End Sub
Donde,
- Provider, especifica el proveedor o motor de la base de datos a la cual se tendrá acceso.
- Data Source, hace referencia a la ubicación actual del archivo de la base de datos.
App.Path es una palabra reservada de Visual Basic que permite obtener el Path o ruta de un archivo,
tomando como base la ubicación del proyecto que actualmente se este trabajando, por ejemplo: si el
proyecto se encuentra guardado en la carpeta “Datos” en la unidad C, el App.Path devolverá C:/Datos.

Docente: Ing. Jaime A. Güette Güette


Lenguajes de Programación III - ADO
CUNIVEMSA

La cadena de conexión variará de acuerdo a la versión y tipo de base de datos a la que se este
conectando
- Creación de un procedimiento que permite realizar consultas a la base de datos

Public Sub Consulta_SQL( Consulta As String )


Set Rs = New ADODB.Recordset
Rs.Open Consulta, Cn, adOpenDynamic, adLockOptimistic
End Sub

Una de las ventajas de emplear procedimientos globales en un módulo, es que nos permite llamarlo para su
ejecución desde cualquier parte del proyecto, agilizando el proceso de codificación.

NOTA: Tenga en cuenta que todo el código tratado hasta aquí, debe ir en el módulo.

5. Abra el formulario del Proyecto de doble clic en el y active el evento Form_Load, para llamar los
procedimientos creados en el módulo de la siguiente manera:

Private Sub Form_Load( )


Conexión
Consulta_SQL “Select * from articulos”
End Sub

* = son todos los campos de la tabla de la base de datos.


articulos = es el nombre de la tabla de la base de datos a la que se desea acceder.

En estos momentos se ha terminado de generar los procedimientos de Conexión y de Consulta_SQL, los


cuales se cargan desde el formulario principal, con el fin de habilitar la base de datos seleccionada en la cadena
de conexión para realizar consultas.

En este momento Inicie la ejecución (F5) para verificar que no hay errores de conexión ni de consultas.

NOTA: No espere a que salga algún dato en el formulario, puesto que el objetivo es verificar que las conexiones
y consultas estén bien.

En caso de algún errores, tenga en cuenta los siguientes aspectos:

• Si emplea el App.Path, el archivo de la base de datos debe estar ubicado en la carpeta del proyecto
actual, o en alguna subcarpeta pero siempre y cuando este dentro de esa carpeta indicada.

• Tenga pendiente cual es el formato actual de la base de datos, debido a que la cadena de conexión
puede variar si la versión del motor de la base de datos no concuerda. Por ejemplo: para bases de datos
de Access 97 la versión del proveedor es 3.5.1, pero si la base de datos es de Access 2000 en adelante
la versión del proveedor es 4.0.

• Revise la consulta SQL, para controlar que se halla escrito bien la tabla de la base de datos a la cual
se desea acceder, así como los campos.

• Verifique que se halla hecho correctamente referencia a la librería ADO adecuada, ya que es fácil
equivocarse, debido a la cantidad de librerías ADO que existen en diferentes versiones, a las que se
pueden hacer referencia. En este caso será: Microsoft ActiveX Data Object 2.0 Library,.

Docente: Ing. Jaime A. Güette Güette


Lenguajes de Programación III - ADO
CUNIVEMSA

6. Después de Ejecutada la consulta y verificar que no hallan salido errores, creamos la siguiente interfaz.

TextBox
Label

Frame

Controles Usados: CommandButton


5 – Labels, 6 – TextBox, 9 – CommandButton y 3 - Frame

Tipo Control Propiedad Valor


Label1 Caption Código Artículo
Label2 Caption Descripción
Label3 Caption Valor Unitario
Label4 Caption Stock Mínimo
Label5 Caption Stock Máximo
TextBox1 Nombre TxtCodigo
TextBox2 Nombre TxtDescripcion
TextBox3 Nombre TxtValor
TextBox4 Nombre TxtStockMin
TextBox5 Nombre TxtStockMax
TextBox6 Nombre TxtRegistro
CommandButton1 Nombre BtnPrimero
Caption |<
CommandButton2 Nombre BtnAnterior
Caption <
CommandButton3 Nombre BtnSiguiente
Caption >
CommandButton4 Nombre BtnUltimo
Caption >|
CommandButton5 Nombre BtnNueva
Caption Nueva
CommandButton6 Nombre BtnEliminar
Caption Eliminar
CommandButton7 Nombre BtnModificar
Caption Modificar
CommandButton8 Nombre BtnGuardar
Caption Guardar

Docente: Ing. Jaime A. Güette Güette


Lenguajes de Programación III - ADO
CUNIVEMSA

CommandButton9 Nombre BtnCancelar


Caption Cancelar
Los tres Frames son los contenedores de los tres grupos que aparecen demarcados en el formulario.
7. Coloque en el Formulario los siguientes bloques de código.

- Cree el siguiente procedimiento para cargar los campos de la base de datos en los
TextBox

Private Sub Carga_Datos( )


TxtCodigo = Rs.Fields(0)
TxtDescripcion = Rs.Fields(1)
TxtValor = Rs.Fields(2)
TxtStockMin = Rs.Fields(3)
TxtStockMax = Rs.Fields(4)
TxtRegistro = Rs.AbsolutePosition & "/" & Rs.RecordCount
End Sub

La propiedad .Fields del RecordSet debe usarse con cuidado, ya que genera un error cuando el campo de
la base de datos al que hace referencia esta vació. (Investigue como corregirlo)
La propiedad .AbsolutePosicion del RecordSet informa sobre la posición actual del registro activo
La propiedad .RecordCount del RecordSet informa sobre la cantidad de registros en la consulta

Llame el procedimiento Carga_Datos desde el Form_Load, así como llamó a Conexión y Consulta_SQL

Ejecute el proyecto para ver los datos cargados en los TextBox ubicados en el formulario, de no ser
así, rectifique.

Iniciaremos la codificación con los botones de movimiento, los cuales permitirán desplazarnos entre
un registro y otro. Para tal efecto siga atentamente las siguientes indicaciones:

- Código para los botones de movimiento entre registros


De doble Clic sobre el Botón BtnPrimero ( |< ) en el formulario y escriba:

Rs.MoveFirst
Carga_Datos

De doble Clic sobre el Botón BtnAnterior ( < ) en el formulario y escriba:

Rs.MovePrevious
If Rs.BOF Then
Rs.MoveFirst
End If
Carga_Datos

La propiedad .BOF indica si el cursor se encuentra en el inicio del conjunto de registros.

De doble Clic sobre el Botón BtnSiguiente ( > ) en el formulario y escriba:


Rs.MoveNext
If Rs.EOF Then
Rs.MoveLast
End If
Carga_Datos

La propiedad .EOF indica si el cursor se encuentra en el final del conjunto de registros.

Docente: Ing. Jaime A. Güette Güette


Lenguajes de Programación III - ADO
CUNIVEMSA

De doble Clic sobre el Botón BtnUltimo ( >| ) en el formulario y escriba:


Rs.MoveLast
Carga_Datos

Es necesario que en cada uno de los botones de movimientos al dar clic, se carguen los campos de la base
de datos en los textbox, la razón es por que cuando se ejecuta uno de los cuatro métodos de movimiento, lo
que se mueve es el cursor del Recordset entre los registros activos de la consulta resultante y eso no se
refleja por sí solo en los controles del formulario. Por esta razón se crea el procedimiento Carga_Datos.

Cuando se da clic en el botón Primero (|<) o Último ( >| ) los métodos correspondientes (.MoveFirst ó
.MoveLast), desplazan el cursor directamente al primer ó último registro del conjunto de registros.

Ahora, Cuando se da clic en el botón Anterior o Siguiente, los métodos correspondientes (.MovePrevious
ó .MoveNext), desplazan el cursor uno a uno cada registro y llegará un momento en que se halla llegado al
final o inicio del conjunto de registros según sea, ahora, si se presiona nuevamente uno de esos dos
botones, se generará un error indicando que se ha llegado a una posición nula y que en ese momento no
existen valores para ninguno de los campos, por esta sencilla razón se establece un control en el momento
exacto en que esto ocurre mediante las propiedades .EOF y .BOF.

Ejecute el proyecto (F5) y pruebe los botones de movimiento entre registros.

Después de comprobados, procedemos con la codificación de los botones de operación sobre la base de
datos (Guardar, Eliminar, Actualizar, Nuevo y Cancelar), pero primero crearemos unas rutinas de control
de botones activos, ya que en ningún momento, no todos los botones deben permanecer disponibles. A
continuación se mostrará gráficamente una tabla que representará dicho comportamiento:

Clic En \ Estado Nuevo Eliminar Modificar Guardar Cancelar


Nuevo Desactivo Desactivo Desactivo Activo Activo
Eliminar Activo Activo Activo Activo Activo
Modificar Desactivo Desactivo Desactivo Activo Activo
Guardar Activo Activo Activo Desactivo Desactivo
Cancelar Activo Activo Activo Desactivo Desactivo

- Creamos un procedimiento para el control de botones.

Public Sub Control_Botones (Indice As Integer)


' Estado de Botones de Operaciones
Select Case Indice
Case 1: ' Botones en Estado Normal
BtnNueva.Enabled = True
BtnEliminar.Enabled = True
BtnModificar.Enabled = True
BtnGuardar.Enabled = False
BtnCancelar.Enabled = False
TxtCodigo.Enabled = False
Case 2: ' Botones al presionar click en nuevo o modificar
BtnNueva.Enabled = False
BtnEliminar.Enabled = False
BtnModificar.Enabled = False
BtnGuardar.Enabled = True
BtnCancelar.Enabled = True
Case 3: 'Botones si no hay registros
BtnEliminar.Enabled = False
BtnModificar.Enabled = False
End Select
End Ing.
Docente: SubJaime A. Güette Güette
Lenguajes de Programación III - ADO
CUNIVEMSA

- Ahora, colocamos el Código para los botones de operación con registros.


De doble Clic en el Botón BtnNueva (Nuevo) en el formulario y escriba:

TxtCodigo = ""
TxtDescripcion = ""
TxtValor = ""
TxtStockMin = ""
TxtStockMax = ""
TxtRegistro = "Nuevo Registro"
Control_Botones 2
TxtCodigo.Enabled = True
SwGuardaOModifica = True

Como el botón Guardar ejecutará los códigos al generar un Nuevo registro o Modificar uno ya existente,
se debe tener en cuenta cual de las dos operaciones debe realizar, ya que no es posible realizar las dos al
tiempo ni mucho menos invertirlas, puesto que los comandos SQL de la instrucción son diferentes. Por tal
razón declaramos una variable boleana la cual es True cuando se da clic en Nuevo y es False cuando se
da clic en Modificar:
Dim SwGuardaOModifica As Boolean

Esta declaración debe estar en la sección de declaración de variables, es decir en la parte superior del
código del formulario.

De doble Clic en el Botón BtnEliminar (Eliminar) en el formulario y escriba


Cn.Close
Conectar
On Error GoTo ErrorOperacion
Cn.BeginTrans
Cn.Execute "Delete From articulos where CodArticulo=" & Val(TxtCodigo) & ""
MsgBox "Registro Eliminado", vbInformation, "Eliminar Registros"
Cn.CommitTrans
Cn.Close
Conectar
Consulta_Inicial
Exit Sub
ErrorOperacion:
Cn.RollbackTrans
MsgBox "Ocurrio el siguiente error: " & Err.Number & " - " & Err.Description

On Error GoTo es una etiqueta que permite mantener un control de los errores del código que se
encuentre dentro de ella, es decir, si en alguna de las líneas de código ubicadas dentro de On Error GoTo
ocurre algún suceso inesperado, automáticamente el programa realiza un salto a la etiqueta especificada
debajo, la cual captura el error y permite darle un tratamiento, sin que este bloquee la aplicación que
actualmente se esta ejecutando.

La propiedad BeginTrans del objeto Connection permite habilitar en modo de vista la base de datos para
realizar una transacción sobre ella.

Docente: Ing. Jaime A. Güette Güette


Lenguajes de Programación III - ADO
CUNIVEMSA

La propiedad CommitTrans del objeto Connection permite completar la transacción en caso de no haber
ocurrido ningún error,

La propiedad RollbackTrans del objeto Connection permite deshacer los cambios ejecutados en una
transacción sobre la base de datos en caso de ocurrido algún error.

De doble Clic en el Botón BtnModificar (Modificar) en el formulario y escriba

Control_Botones 2
SwGuardaOModifica = False

De doble Clic en el Botón BtnGuardar ( Guardar ) en el formulario y escriba


Control_Botones 1
Cn.Close
Conectar
On Error GoTo ErrorOperacion
Cn.BeginTrans
If SwGuardaOModifica = True Then
Cn.Execute "Insert Into articulos(CodArticulo,Descripcion,Valor,StockMin,StockMax) values(" &
Val(TxtCodigo) & ",'" & TxtDescripcion & "'," & Val(TxtValor) & "," & Val(TxtStockMin) & "," &
Val(TxtStockMax) & ")"
MsgBox "Registro Guardado", vbInformation, "Guardar Registros"
Else
Cn.Execute "Update articulos Set Descripcion='" & TxtDescripcion & "', Valor=" & Val(TxtValor) & ",
StockMin=" & Val(TxtStockMin) & ", StockMax=" & Val(TxtStockMax) & " Where CodArticulo=" &
Val(TxtCodigo) & ""
MsgBox "Registro Actualizado", vbInformation, "Eliminar Registros"
End If
Cn.CommitTrans
Cn.Close
Conectar
Consulta_Inicial
Exit Sub
ErrorOperacion:
Cn.RollbackTrans
MsgBox "Ocurrio el siguiente error: " & Err.Number & " - " & Err.Description

De doble Clic en el Botón BtnCancelar (Cancelar) en el formulario y escriba


Consulta_Inicial
Control_Botones 1

Pro último actualizamos el código del evento FormLoad cambiándolo por el siguiente:
Private Sub Form_Load( )
Conectar
Consulta_Inicial
Control_Botones 1
End Sub

Y Creamos el procedimiento de Consulta_inicial

Public Sub Consulta_Inicial( )


Consulta "Select * from articulos"
Rs.MoveFirst
Docente: Ing. Jaime A. Güette Güette
Carga_Datos
End Sub
Lenguajes de Programación III - ADO
CUNIVEMSA

Ejecutamos y probamos el programa, en este momento debe funcionar.


Actividad Final
Deberá aumentar el control sobre las operaciones realizadas, los cuales se detallan a continuación:

• Validar que los campos reciban solo el tipo de datos solicitado, es decir, si solicita un número, que
permita escribir solo números.
• Al Guardar un nuevo registro, verificar que se hallan llenado los textbox solicitados.
• Al Guardar un nuevo registro, controlar que la identificación o clave primaria no se encuentre ya
registrada en la base de datos, ya que esto generaría errores por duplicidad en la clave.
• Habilitar una ventana de búsqueda de datos.
• No permitir desplazarse en los registros, mientras se está modificando o creando uno nuevo.
• Al eliminar, preguntar si realmente desea realizar la operación. Usando aceptar y cancelar mediante
un cuadro de mensaje ( Msgbox )

Docente: Ing. Jaime A. Güette Güette

You might also like