Seguimos con los ejemplos para acceder a las bases de datos generadas con el Access 2000.
En esta ocasión lo hacemos desde el VB5 (también vale para el VB6 o posterior), pero usando DAO.
Si quieres ver ejemplos usando ADO, pásate por estos otros artículos:
Acceder a bases de Access 2000 (usando el datacontrol ADO)
Acceder a bases de datos con ADO, sin data control
El "truco" consiste en agregar la referencia a la librería adecuada del motor JET, en esta ocasión será: Microsoft DAO 3.6 Object Library
Por tanto, en el menú de proyecto tendrás que seleccionar "Referencias..." y de la lista seleccionar la librería de la versión 3.6. Una vez referenciada el motor adecuado, podremos acceder a las bases creadas con el Access 2000. En el ejemplo que acompaña a este artículo veremos cómo acceder a la base de datos de ejemplo que se incluía en los artículos antes mencionados, (por supuesto el formato es de Access 2000)
Nota: He probado usando el DataControl normal (DAO) y no reconoce el formato de la base de datos, así que si quieres usar un Datacontrol en lugar de "código puro y duro"... tendrás que hacerlo con el control ADO.
Re-Nota (10/Nov/2000): Si tienes el VB6 con el SP4 si que puedes usar el Datacontrol de DAO para acceder a las bases de datos de Access 2000, aunque puedes encontrarte con problemillas si lo que estás haciendo es "reutilizar" un proyecto creado anteriormente.
Este link te indicará cómo solventarlo de forma fácil.
El código de ejemplo:
Crea un nuevo proyecto, en Proyecto/Referencias... selecciona Microsoft DAO 3.6 Object Library, añade 3 controles TextBox (Text1, un array desde el índice 0 al 2), otro TextBox (Text2), un array de cuatro botones (cmdMove, con índices desde 0 a 3), un botón para Actualizar (cmdUpdate), otro para Eliminar registros (cmdDel) y otro para Añadir nuevos registros (cmdAdd), además una etiqueta (lblStatus) para mostrar alguna que otra información de lo que estamos haciendo.
Por último, pega este código y... ¡ya está!Este es el aspecto del formulario:
Y este es el código:
'------------------------------------------------------------------------------ ' Prueba de acceso a base de datos usando código DAO (05/Oct/99) ' ' En las referencias del proyecto, seleccionar: ' Microsoft DAO 3.6 Object Library ' ' ©Guillermo 'guille' Som, 1999 '------------------------------------------------------------------------------ Option Explicit Private sBase As String ' Nombre de la base de datos ' Objetos para acceder directamente a la base usando código Private db As Database Private rst As Recordset ' Constantes para el movimiento dentro del recordset Const cPrimero = 0 Const cAnterior = 1 Const cSiguiente = 2 Const cUltimo = 3 Private Sub cmdAdd_Click() ' Añadir un nuevo registro al recordset Dim i As Long ' Vaciar el contenido de los textboxes For i = 0 To 2 Text1(i) = " " Next Text2 = "Nuevo registro" On Error Resume Next ' Añadir uno nuevo With rst .AddNew !Nombre = Text1(0) ![e-mail] = Text1(1) !Comentario = Text1(2) ' Actualizar el contenido .Update ' Esto es necesario para actualizar el "puntero" del recordset .Bookmark = .LastModified Text2.Text = "ID: " & !ID lblStatus.Caption = " Registro: " & !ID & " (" & .AbsolutePosition + 1 & ")" End With Text1(0).SetFocus Err = 0 End Sub Private Sub cmdDel_Click() ' Eliminar el registro actual rst.Delete On Error Resume Next ' Mover al siguiente registro rst.Move 1 ' Si no puede moverse al siguiente, moverlo al anterior If Err Then rst.MovePrevious End If ' Es necesario mostrar el contenido de los registros MostrarRegistro Err = 0 End Sub Private Sub cmdMove_Click(Index As Integer) ' Moverse por el recordset On Local Error Resume Next Err = 0 Select Case Index Case cPrimero ' Primero rst.MoveFirst Case cAnterior ' Anterior rst.MovePrevious Case cSiguiente ' Siguiente rst.MoveNext Case cUltimo ' Último rst.MoveLast End Select ' Mostrar el contenido del registro actual MostrarRegistro ' Mostrar el mensaje de error, para comprobación If Err Then lblStatus.Caption = " " & Err.Description Else ' Mostrar el ID del registro y la posición dentro del recordset lblStatus.Caption = " Registro: " & rst!ID & " (" & rst.AbsolutePosition + 1 & ")" End If Err = 0 End Sub Private Sub cmdUpdate_Click() ' Actualizar el contenido del registro actual On Error Resume Next ' Entrar en modo de edición rst.Edit ' Cuando no se liguen los controles, después de introducir los datos, ' es necesario pulsar en este botón rst!Nombre = Text1(0) ' Como el nombre de este campo tiene signos especiales, ' hay que ponerlo entre corchetes rst![e-mail] = Text1(1) rst!Comentario = Text1(2) ' Actualizar el contenido rst.Update If Err Then lblStatus.Caption = " Actualizar: " & Err.Description Else lblStatus.Caption = " Registro actualizado" End If Err = 0 End Sub Private Sub Form_Load() ' Asignar el nombre de la base de datos ' (si la aplicación se ejecuta en el directorio raiz, quitar el \) sBase = App.Path & "\db2000.mdb" lblStatus.Caption = "" ' Crear los objetos Set db = OpenDatabase(sBase) Set rst = db.OpenRecordset("SELECT * FROM Table1") ' Deshabilitar el botón de Actualizar cmdUpdate.Enabled = False ' Posicionarse en el primer registro cmdMove_Click cPrimero End Sub Private Sub Form_Unload(Cancel As Integer) ' Cerrar las conexiones y deshacerse de las referencias de los objetos On Error Resume Next rst.Close db.Close Set rst = Nothing Set db = Nothing Err = 0 Set fDAO = Nothing End Sub Private Sub MostrarRegistro() ' Mostrar en las cajas de texto el contenido del registro actual On Error Resume Next ' Comprobamos que nos hemos movido a un registro existente If (Not rst.EOF) And (Not rst.BOF) Then Text2.Text = "ID: " & rst!ID Text1(0) = rst!Nombre ' Como el nombre de este campo tiene signos especiales, ' hay que ponerlo entre corchetes Text1(1) = rst![e-mail] Text1(2) = rst!Comentario End If Err = 0 End Sub Private Sub Text1_Change(Index As Integer) ' Si se modifica el contenido de los textbox, permitir actualizar cmdUpdate.Enabled = True End Sub