Sunteți pe pagina 1din 18

1 - Breve descripción

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 reflejarán 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
operación"

Si bien estas propiedades se pueden establecer en tiempo de ejecución, en el


ejemplo solo se realizará en tiempo de diseño

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á también 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 botón 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 código del formulario:

'Botón para Agregar un Nuevo Registro


Private Sub CmdAgregar_Click()
Data1.Refresh
Data1.Recordset.AddNew
txtNombre.SetFocus
End Sub

'Botón 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

'Botón 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
'Botón 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 posición del registro activo del control Data
Private Sub Data1_Reposition()
Screen.MousePointer = vbDefault
On Error Resume Next
'Mostramos el número 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 opción para buscar un registro:

Añadirle 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 Diercción "
← Un Option3 y en el Caption: " Por Teléfono "
← Un CommandButton llamado CmdBuscar
El código del procedimiento al pulsar el botón 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 ejecución

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
también 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
llamado ComboNombres, 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 caso Telefono. Todo esto desde la ventana de propeidades como
muestra la imagen:

Hacer lo mismo para los restantes Controles textBox

El código fuente del Formulario sería el siguiente:

Option Explicit

'Ejemplo 2 del control Data y la propiedad Recordsource en tiempo


de ejecución

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 podés 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 ejecución

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
ejecución, 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 código 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 diálogo 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

Abrir la base con Password en Access 97:

Private Sub Form_Load()

Dim Password As String

' Passsword de la base de datos


Password = ";PWD=" & "el_password"

'Path de la bd
Data1.DatabaseName = App.Path & "\bd1.mdb"

Data1.Connect = Password

Data1.Refresh

End Sub
http://www.forosdelweb.com/f69/que-source-safe-384279/

Microsoft VSS le ayuda a administrar sus proyectos, sin tener en cuenta el tipo de archivo
(archivos de texto, archivos gráficos, archivos binarios, archivos de sonido o archivos de vídeo)
guardándolos en una base de datos. Cuando necesite compartir archivos entre dos o más
proyectos, puede compartirlos de manera rápida y eficiente. Cuando agrega un archivo a VSS,
se hace una copia de seguridad del archivo en la base de datos, se hace que esté disponible
para las demás personas, y los cambios que se hagan en el archivo se guardan de forma que
se pueda recuperar una versión anterior en cualquier momento. Los miembros de su equipo
pueden ver la versión más reciente de cualquier archivo, hacer cambios y guardar una nueva
versión en la base de datos.
La organización de proyectos de VSS hace que la coordinación del equipo sea fácil e intuitiva;
para más información sobre proyectos, consulte Proyectos y para más información sobre
archivos, consulte Archivos.
Cuando un archivo (o conjunto de archivos) está listo para entregar a otra persona, grupo, sitio
Web o cualquier otra ubicación, VSS hace que sea fácil compartir y asegurar versiones
diferentes del conjunto de archivos seleccionado.
Cada vez más, los programadores están teniendo acceso a funciones de VSS desde el interior
de su entorno de desarrollo. VSS se puede integrar fácilmente con Microsoft Access, Visual
Basic, Visual C++, Visual FoxPro y otras herramientas de desarrollo. Si VSS se integra en su
entorno de desarrollo, no necesita ejecutar VSS de manera separada para darse cuenta de las
ventajas del control de código fuente.

Me uno al comentario del otro respondente al pedir que seas un poco más específico, pero
asumo lo siguiente, si te das cuenta que luego de insertar un dato el recordset no queda
ordenado es porque lo visualisas en un datagrid o un msflexgrid, si es en un data grid te
puedo ayudar, lo que ocurre (supongo) es que el llenado de este la primera vez se ejecuta
con codigo puesto en el evento Load o Activate del formulario, y luego cuando insertas un
nuevo registro ya no sale ordenado porque el código de ordenar no se ejecuta, lo que yo
hago es declarar un código como el siguiente:

Private Sub RefrescarGrid()

Set cmdComando.ActiveConnection = cnnconexion

cmdComando.CommandType = adCmdText
cmdComando.CommandTimeout = 15
cmdComando.CommandText = "Select * from Autor order by Id_Autor"

Set rstAutor = cmdComando.Execute

Set dgrMuestra.DataSource = rstAutor

dgrMuestra.Refresh
End Sub

Y luego en los botones de guardar, editar o eliminar hago un call Refrescargrid, y se


reordena.

Como vez también supuse que te conectas mediante ADO. Espero te sirva
'Con esta logica marcas los registros a eliminar

For Each RegSelection In Grid.SelBookmarks


rsCCosto.Bookmark = RegSelection
rsCCosto.Delete
Next

'Con esto actualizas el recordset.

rsCCosto.UpdateBatch

'Finalmente recuperas el Recorset actualizado

rsCCosto.Sort = adSortNone
Set rsCCosto.ActiveConnection = cnContabilidad
rsCCosto.Requery

'Ahora puedes volver a cargar tu datagrid.

Hola, en un formulario en blanco tengo un cuadro de texto y un cuadro de lista.


Con el siguiente código, me va filtrando la información que vuelca en un cuadro de lista.
Luego con un evento dobleclick en el cuadro "lista Final" me carga el dato elegido en un
varios cuadros de texto que conforman el formulario, según cada campo del item elegido.

Private Sub txtBusqueda_Change()

Me.ListaFinal.Visible = True

Me!ListaFinal.RowSource = "SELECT * FROM Alumnos WHERE Dni Like'*" &


Me.txtbusqueda.Text & "*' OR ApellidoNombre LIKE '*" &
Me.txtbusqueda.Text & "*' "

End Sub

Private Sub ListaFinal_DblClick(Cancel As Integer)

Me.txtbusqueda.SetFocus

With Me.ListaFinal
Me.txtDni = CLng(.Column(0))
Me.txtApellidoNombre = .Column(1)
Me.txtMayor = .Column(2)
Me.txtCelular = .Column(3)
Me.txtEmail = .Column(4)
Me.txtPlanEstudio = .Column(5)
End With

End Sub

en un formulario en blanco tengo un cuadro de texto y un cuadro de lista.


Con el siguiente código, me va filtrando la información que vuelca en un cuadro de lista.
Luego con un evento dobleclick en el cuadro "lista Final" me carga el dato elegido en un
varios cuadros de texto que conforman el formulario, según cada campo del item elegido.

Private Sub txtBusqueda_Change()

Me.ListaFinal.Visible = True

Me!ListaFinal.RowSource = "SELECT * FROM Alumnos WHERE Dni Like'*" &


Me.txtbusqueda.Text & "*' OR ApellidoNombre LIKE '*" &
Me.txtbusqueda.Text & "*' "

End Sub

Private Sub ListaFinal_DblClick(Cancel As Integer)

Me.txtbusqueda.SetFocus

With Me.ListaFinal
Me.txtDni = CLng(.Column(0))
Me.txtApellidoNombre = .Column(1)
Me.txtMayor = .Column(2)
Me.txtCelular = .Column(3)
Me.txtEmail = .Column(4)
Me.txtPlanEstudio = .Column(5)
End With

End Sub