Acceso a Datos Con ADO VB6

Lenguajes de Programación III - ADO CUNIVEMSA ACCESO A DATOS USANDO ADO (ActiveX Data Object) El entorno de acceso a b

Views 111 Downloads 7 File size 139KB

Report DMCA / Copyright

DOWNLOAD FILE

Recommend stories

Citation preview

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: 5 – Labels, 6 – TextBox, 9 – CommandButton y 3 - Frame Tipo Control Label1 Label2 Label3 Label4 Label5 TextBox1 TextBox2 TextBox3 TextBox4 TextBox5 TextBox6 CommandButton1 CommandButton2 CommandButton3 CommandButton4 CommandButton5 CommandButton6 CommandButton7 CommandButton8 Docente: Ing. Jaime A. Güette Güette

Propiedad Caption Caption Caption Caption Caption Nombre Nombre Nombre Nombre Nombre Nombre Nombre Caption Nombre Caption Nombre Caption Nombre Caption Nombre Caption Nombre Caption Nombre Caption Nombre Caption

CommandButton Valor Código Artículo Descripción Valor Unitario Stock Mínimo Stock Máximo TxtCodigo TxtDescripcion TxtValor TxtStockMin TxtStockMax TxtRegistro BtnPrimero |< BtnAnterior < BtnSiguiente > BtnUltimo >| BtnNueva Nueva BtnEliminar Eliminar BtnModificar Modificar BtnGuardar Guardar

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 (|| ) 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 Activo Desactivo Activo Activo

Eliminar Desactivo Activo Desactivo Activo Activo

Modificar Desactivo Activo Desactivo Activo Activo

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. SubJaime A. Güette Güette Docente:

Guardar Activo Activo Activo Desactivo Desactivo

Cancelar Activo Activo Activo Desactivo Desactivo

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