Anda di halaman 1dari 16

1 - Breve descripcin

El control Data se utiliza con el motor de base de datos Microsoft Jet para acceder a base de datos de diferentes formatos como por ejemplo: Microsoft Access, Dbase, Excel, FoxPro, Lotus y Paradox, aunque en los ejemplos solo se utilizar Microsoft Access como base de datos. El control Data permite trabajar con controles enlazados, por ejemplo con controles Label, TextBox, ComboBox, controles Image etc.. para presentar los datos. Esto quiere decir que al colocar un control Data y enlazarlo a una base de datos y luego enlazar dichos controles con el control Data, los cambios que se realicen en los controles enlazados se reflejarn en la base de datos. Para enlazar la base de datos con un control Data ubicado en el formulario, se utiliza la propiedad DataBaseName y Connect. En la propiedad Connect se especifica el tipo de base de datos, por ejemplo: Access. Luego, ya se puede seleccionar la base de datos. Para indicar con que tabla se encontrar unida al control se utiliza la propiedad RecordSource. Nota: Antes de especificar la tabla en la propiedad RecordSource hay que indicar la propiedad DataBaseName y Connect, de lo contrario se producir un error " Debe rellenar las propiedades DataBaseName y Connect para llevar a cabo la operacin" Si bien estas propiedades se pueden establecer en tiempo de ejecucin, en el ejemplo solo se realizar en tiempo de diseo

2 - Ejemplo 1 : Crear una Agenda simple


El primer paso ser crear una base de datos Access con los siguientes campos: Nombre, Direccion y Telefono. El tipo de dato de los campos establecerle como de Tipo Texto Luego guardar la tabla con el nombre Contactos Colocar la base de datos en una carpeta cualquiera, donde se ubicar tambin el proyecto de ejemplo. Iniciar un nuevo proyecto de tipo Exe y guardarlo en la carpeta anterior. En el formulario principal, lo primero ser colocar un control Data llamado Data1. Ahora seleccionar el control Data1, y desde la ventana de propiedades serciorarse que la propiedad Connect est con el valor Access y en la propiedad DataBaseName elegir la base de datos anteriormente creada.

Manteniendo seleccionado siempre el control Data, ahora localizar la propiedad Recordsource para indicar la tabla a la cual estar enlazada, y seleccionamos la Tabla Contactos. Colocar los siguiente controles en el formulario como est en la siguiente imagen: Textbox: txtNombre, txtDireccion y txtTelefono TextBox: txtNomEdit, txtDirEdit y txtTelEdit

El commandButton Agregar colocarle el nombre CmdAgregar El botn de Eliminar CmdEliminar Refrescar: CmdRefresh Actualizar : CmdActualizar Modificar: CmdModificar

Ahora para enlzar los textBox llamados txtNombre, txtDireccion y txtTelefono, hay que indicarle en la propiedad DataField de cada uno de los TextBox, el campo por el cual

se enlazar. Para el primero, seleccionar el campo Nombre en la propiedad DataField, el segundo Textbox el campo Direccion y el tercero el campo Telefono

El cdigo del formulario:

'Botn para Agregar un Nuevo Registro Private Sub CmdAgregar_Click() Data1.Refresh Data1.Recordset.AddNew txtNombre.SetFocus End Sub 'Botn para Eliminar el Registro Activo Private Sub CmdEliminar_Click() With Data1.Recordset 'Elimina If Data1.Recordset.RecordCount = 0 Then Exit Sub .Delete 'Posiciona en el siguiente .MovePrevious If Not .EOF Then .MoveLast End With End Sub 'Botn para Actualizar los cambios Private Sub CmdActualizar_Click() On Error GoTo errSub 'Actualiza el control data Data1.UpdateRecord Data1.Recordset.Bookmark = Data1.Recordset.LastModified Exit Sub errSub: If Err.Number = 524 Then

MsgBox "Para actualizar un registro primero agregue uno nuevo o" & _ "modifique algun registro activo", vbInformation End If End Sub 'Botn para modificar el registro activo Private Sub CmdModificar_Click() Data1.Recordset.Edit If txtNomEdit <> "" Then Data1.Recordset("Nombre").Value = txtNomEdit If txtDirEdit <> "" Then Data1.Recordset("Direccion").Value = txtDirEdit If txtTelEdit <> "" Then Data1.Recordset("telefono").Value = Val(txtTelEdit) Data1.Recordset.Update End Sub 'Refresca el control Private Sub CmdRefresh_Click() Data1.Refresh End Sub 'Evento que ocurre Cuando se produce un error en el control Data Private Sub Data1_Error(DataErr As Integer, Response As Integer) MsgBox "Error: " & Error$(DataErr) Response = 0 End Sub 'Muestra la posicin del registro activo del control Data Private Sub Data1_Reposition() Screen.MousePointer = vbDefault On Error Resume Next 'Mostramos el nmero de registro en el control Data en la propiedad caption Data1.Caption = "Registro n : " & (Data1.Recordset.AbsolutePosition + 1) End Sub

Private Sub Data1_Validate(Action As Integer, Save As Integer) Select Case Action Case vbDataActionMoveFirst Case vbDataActionMovePrevious Case vbDataActionMoveNext Case vbDataActionMoveLast Case vbDataActionAddNew Case vbDataActionUpdate Case vbDataActionDelete Case vbDataActionFind Case vbDataActionBookmark Case vbDataActionClose Screen.MousePointer = vbDefault End Select Screen.MousePointer = vbHourglass End Sub

Private Sub Form_Load() 'Ac especificar el path de la base de datos Data1.DatabaseName = App.Path & "\bd1.mdb" txtNomEdit = "": txtDirEdit = "": txtTelEdit = "" txtSearchNom = "": txtSearchDir = "": txtSearchTel = "" End Sub Private Sub Form_Unload(Cancel As Integer) Screen.MousePointer = vbDefault End Sub

Agregar una opcin para buscar un registro:

Aadirle al ejemplo anterior los siguientes controles: 3 TextBox: txtSearchNom, txtSearchDir y txtSearchTel Un Option1 y en el Caption: " Por nombre " Un Option2 y en el Caption: " Por Dierccin " Un Option3 y en el Caption: " Por Telfono " Un CommandButton llamado CmdBuscar

El cdigo del procedimiento al pulsar el botn Buscar

Private Sub CmdBuscar_Click() If Option1.Value = True Then Data1.Recordset.FindFirst ("Nombre = '" & txtSearchNom & "'") ElseIf Option2.Value = True Then Data1.Recordset.FindFirst ("Direccion = '" & txtSearchDir & "'") ElseIf Option3.Value = True Then Data1.Recordset.FindFirst ("telefono = '" & txtSearchTel & "'") End If If Data1.Recordset.NoMatch Then MsgBox " Registro no encontrado", vbInformation End Sub

Descargar ejemplo

3 - Ejemplo 2 - Propiedad Recordsource en tiempo de ejecucin

El siguiente ejemplo muestra una forma de utilizar la propiedad Recordsource del control Data El mismo consiste en un control Combo que tiene cargado los nombres de Clientes de una Tabla, y al seleccionar uno de ellos, poder mostrar otros datos del Cliente en unos TextBox, como muestra esta imagen:

Pasos para crear el ejemplo : Crear una base de datos llamada base.MDB. Dentro de esta una tabla llamada Clientes en la cual tendr los siguientes campos: Nombre, Telefono, Pais y Correo. Todos los campos dejarlos como de tipo texto. Cargar algunos datos de ejemplo y Guardar la base de datos en una carpeta donde tambin se guardar el proyecto de Visual basic. Ahora crear un nuevo proyecto en Visual basic y agregar en el formulario los siguiientes controles: Un control Data llamado Data1. Un control ComboBox llamadoComboNombres, Un textBox llamado txtTelefono, otro txtPais y otro txtCorreo Ahora se enlazar en la propiedad DataField y DataSource de cada TextBox, el campo relacionado y el control Data1 como fuente de los registros. Por ejemplo, para el txtTelefono seleccionar la propiedad DataSource y seleccionar el control Data1 y en la propiedad DataField escribir el nombre del campo, en este casoTelefono. Todo esto desde la ventana de propeidades como muestra la imagen:

Hacer lo mismo para los restantes Controles textBox

El cdigo fuente del Formulario sera el siguiente:

Option Explicit 'Ejemplo 2 del control Data y la propiedad Recordsource en tiempo de ejecucin

Private Sub ComboNombres_Click() ' Al hacer Click en el elemento del combo _ se selecciona mediante sql el registro _ y la cadena Sql se asigna al Recorsource del _ control data Data1.RecordSource = _ "SELECT * FROM Clientes WHERE Nombre='" & ComboNombres & "'" 'Refresca el control data

Data1.Refresh End Sub Private Sub Form_Load() Dim Path_Base_Dato As String, db As Database Dim rst As Recordset

Path_Base_Dato = App.Path Path_Base_Dato = Path_Base_Dato & "\base.mdb" 'Abre la base de datos Set db = OpenDatabase(Path_Base_Dato) 'Abre el Recordset con la consulta: Selecciona los nombres ordenados Set rst = db.OpenRecordset( _ "SELECT Nombre FROM Clientes ORDER BY Nombre", _ dbOpenSnapshot) ' Se mueve al primer registro rst.MoveFirst Do While Not rst.EOF 'Agrega el Nombre al Combo ComboNombres.AddItem rst!Nombre 'siguiente registro rst.MoveNext Loop 'Cierra el recordset y la base rst.Close db.Close 'Se asigna la base de datos al Data1

Data1.DatabaseName = Path_Base_Dato 'Seleccionamos el primer elemento del combo ComboNombres.ListIndex = 0 Me.Caption = " Ejemplo de la propiedad recordsource del control Data " End Sub

Este mismo ejemplo lo pods descargar desde este enlace:


Descargar Ejemplo 2 - Control Data

4 - Enlazar un control Data con un DbGrid

Para enlazar un control Data a un control DbGrid, es muy simple. Una ves que el control Data ya tiene especificado en la propiedad DataBaseName el nombre de la base de datos, y en la propiedad Recordsource la fuente de los registros ( consulta sql o tabla) , solo hay que especificar en la propiedad DataSource del control DbGrid, el control Data al cual estar enlazado. Como muestra la imagen:

Para enlzar un control MsFlexGrid, se realiza de la misma forma, especificando en el control FlexGrid en la propiedad DataSource, el Data al cual enlazarlo.

Enlazar un control Data con un DbGrid y especificar el RecordSource en tiempo de ejecucin


Este ejemplo es similar al anterior, es decir, se enlazar un control Data con un DbGrid, pero al cambiar la propiedad Recordsource del control Data en tiempo de ejecucin, el DbGrid visualizar los nuevos datos. Colocar un DbGrid llamado DbGrid1, un control Data llamado Data1, un control TextBox llamado Text1 , un CommonDialog1, y dos botones, Command1 y Command2 El Command1 ser para seleccionar la base de datos. El Command2 para ejecutar la consulta sql que se escribir en el control Text1. Esta es una vista del ejemplo

Importante: Al control DbGrid, especificarle en la propiedad DataSource el control Data1

El cdigo fuente del formulario:

Option Explicit Private Sub Command1_Click() On Error GoTo ErrSub With Data1 'Se asigna el Recordsource al data .RecordSource = Trim$(Text1.Text) .Refresh 'refresca el control End With Exit Sub

ErrSub: MsgBox Err.Description, vbCritical, " Error " End Sub Private Sub Command2_Click() On Error GoTo ErrSub

'Abre el cuadro de dilogo para Seleccionar la base de datos With CommonDialog1 .DialogTitle = " Seleccionar base de datos para anlzar con el Data " .Filter = "Archivos de base de datos Access|*.mdb" .ShowOpen If .FileName = "" Then Exit Sub Else 'Le especifica el path de la Bd al control data1 Data1.DatabaseName = .FileName MsgBox " Ahora escriba una consulta en Text1 para " & _ "cargar el DbGrid ", vbInformation End If End With Exit Sub ErrSub: MsgBox Err.Description, vbCritical, " Error " End Sub

Private Sub Data1_Error(DataErr As Integer, Response As Integer) Response = 0 End Sub Private Sub Form_Load() Me.Caption = " Ejemplo DbGrid y el control Data Command1.Caption = " Ejecutar consulta " Command2.Caption = " Seleccionar BD " ' Tipo de base de datos para el Data Data1.Connect = "Access" End Sub "

Descarga ejemplo

5 - Abrir una base de datos con Password

Estos dos ejemplos muestran como abrir una base de datos Microsoft Access con password para asociarla luego a un control Data El primer ejemplo abre una Bd de tipo Access 2000, el segundo una Bd de tipo Access 97.

Este ejemplo requiere incluir la referencia a Microsoft DAO desde el men Proyecto Referencias e incluir un control Data llamado Data1

Option Explicit Private Sub Form_Load() Dim Path As String Dim db As Database Dim rst As Recordset

Path = App.Path & "\Bd1.mdb"

Set db = DBEngine.OpenDatabase(Path, False, False, "MS Access;PWD=EL_PASSWORD") ' Abre el recordset Set rst = db.OpenRecordset("El_Campo") ' Asocia el recordset al control Data Set Data1.Recordset = rst End Sub

Anda mungkin juga menyukai