Acceso a base de datos de Access 2000

Usando el ADO data control

Publicado: 31/Ago/1999
Actualizado: 31/Ago/1999


Si has intentado usar una base de datos creada o convertida con el Access 2000, te habrás llevado una pequeña sorpresa al ver que usando el Data control que se incluye en el Visual Basic no te permite hacerlo.
Esto es porque el nuevo formato de Access usa el motor Jet versión 4.0 y los datacontrol DAO sólo "entienden" hasta la versión 3.5...

Pero si tienes la versión 6.0 de Visual Basic, o bien has conseguido las DLLs de ADO (ActiveX Data Object), puedes usarlas sin problemas... incluso con el ADO Datacontrol.

En el siguiente código veremos cómo abrir y movernos en una base de datos, en este caso, lo mismo dará que la base de datos haya sido creada con Access 97 o con el Access 2000.

Nota: En el zip con el código de ejemplo se acompaña una base de datos de prueba creada con Access 97 y otra con el Access 2000.

 

Para empezar:

Crea un nuevo proyecto, en Proyecto/Componentes... selecciona Microsoft ADO Data Control (OLEDB), pulsa Aceptar y verás que se añade un nuevo control a la barra de herramientas: ¡Ese será el control que usaremos!

Haz dobleclick en ese control para que se añada al formulario, cámbiale la altura a un valor pequeño: 315 está bien, sitúalo donde más coraje te de y añade un TextBox, cambia el tamaño, yo le he dado estos valores:
alto 315, ancho 2955.
Crea un array del Text1 recién añadido:
Selecciona el Text1, pulsa el botón derecho y copialo; pulsa en cualquier lado del Form y pulsa el ratón derecho del ratón, selecciona Pegar... te preguntará si quieres crear un array del control Text1, responde que SI.
Vuelve a pegar de nuevo y se creará un tercer Text1.
Ahora tendrás tres controles Text1 con los índices desde 0 a 2

Si te parece demasiado "básico" todos estos pasos... te aguantas...
y espera un poco que ya mismo termino.

Ahora vamos a configurar el ADO datacontrol:
Selecciona el datacontrol, en la ventana de propiedades pulsa en Custom...
Te mostrará un cuadro de diálogo, (puede que si tienes la versión en castellano del VB, no te muestre lo que yo te digo, ya que la versión que tengo está en inglés, pero espero que no te lies...)
En la ficha General, estará seleccionada la opción "Use Connection String", pulsa en el botón "Build..."
Te mostrará otro cuadro de diálogo, en la ficha "Provider", selecciona Microsoft Jet 4.0 OLE DB Provider, pulsa en "Next>>" y selecciona la base de datos que quieres usar, (si tienes la que están incluidas en el ZIP, se llamará db2000.mdb); el resto de opciones déjalos como está; pulsa en "Aceptar" dos veces para que se cierren los cuadros de diálogo.

Ahora tenemos que decirle que tabla usar y otras cosillas.
Selecciona la propiedad CursorType y de la lista desplegable selecciona 2-adOpenDynaset.
Selecciona la propiedad RecordSource y pulsa en el botón, te mostrará un cuadro de diálogo.
De la lista desplegable (Command type), selecciona: 2-adCmdTable, la lista "Table or Stored Procedure Name" se habrá habilitado, selecciona el nombre de la tabla que quieres usar, en este caso Table1 y pulsa en Aceptar.

Esto mismo se puede hacer mediante código, para ello asígnale estos valores al datacontrol: (por ejemplo en el evento Form_Load)

' Indicar la base de datos a usar
Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                          "Data Source=" & App.Path & "\db2000.mdb"

Adodc1.CursorType = adOpenDynamic
' Conectarlo a la tabla de prueba
Adodc1.RecordSource = "Table1"
' Refresh es necesario para que se cargue la tabla
Adodc1.Refresh

Nota: En el código de ejemplo asignaremos en tiempo de ejecución la base de datos y demás conexiones necesarias.

Ahora será necesario "ligar" los cuadros de texto con el Datacontrol y los campos correspondientes:
Selecciona los tres Text1, en la ventana de propiedades selecciona DataSource y en la lista desplegable selecciona Adodc1

 

Para ligar cada Text1 con un campo de la base de datos:

Pulsa en cualquier parte del formulario para quitar la selección actual.
Selecciona el Text1 con índice 0.
En la ventana de propiedades, selecciona DataField y de la lista desplegable, selecciona "Nombre"
Haz lo mismo con los otros dos Text1, pero para el de índice 1, selecciona "e-mail" y para el otro: "Comentario"
Este último control sería conveniente que lo hicieras más grande y MultiLine, ya que se supone que aceptará textos más grandes porque el tipo de campo es "Memo"

Ya puedes pulsar en F5 para probar que todo esto funciona.

Realmente no es necesario añadir nada de código, pero si quieres hacerlo manualmente, añade lo siguiente en el evento Form_Load:


Private Sub Form_Load()
    ' Indicar la base de datos a usar
    Adodc1.ConnectionString = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
                              "Data Source=" & App.Path & "\db2000.mdb"
    
    Adodc1.CursorType = adOpenDynamic
    ' Conectarlo a la tabla de prueba
    Adodc1.RecordSource = "Table1"
    ' Refresh es necesario para que se cargue la tabla
    Adodc1.Refresh
    
    ' Conectar manualmente los Text1 al recordset
    Dim i As Long
    ' Asignar el control data
    For i = 0 To 2
        Set Text1(i).DataSource = Adodc1
    Next
    ' Asignar los nombres de los campos
    Text1(0).DataField = "Nombre"
    Text1(1).DataField = "e-mail"
    Text1(2).DataField = "Comentario"
End Sub

Para que el Caption del data control nos muestre el número de registro, en este caso el campo ID de la tabla, añade este código:


Private Sub Adodc1_MoveComplete(ByVal adReason As ADODB.EventReasonEnum, _
                                ByVal pError As ADODB.Error, _
                                adStatus As ADODB.EventStatusEnum, _
                                ByVal pRecordset As ADODB.Recordset)
    ' Mostrar el ID del registro actual
    ' si se pasa del primero o del último, dará error
    
    On Local Error Resume Next
    
    ' Mostrar el ID del registro actual usando el recordset pasado como parámetro
    'Adodc1.Caption = "ID del Registro: " & pRecordset!ID
    ' También se puede usar:
    Adodc1.Caption = "ID del Registro: " & Adodc1.Recordset!ID
    
    Err = 0
End Sub

Añadir y borrar registros de la tabla.

Para tener estas dos opciones, añade dos botones al formulario, al primero lo llamas cmdAdd y en el Caption escribe Añadir, al otro botón le cambias el nombre a cmdDel y en el Caption escribe: Eliminar.
Añade el siguiente código:

'
Private Sub cmdAdd_Click()
    Adodc1.Recordset.AddNew
End Sub

Private Sub cmdDel_Click()
    Adodc1.Recordset.Delete
End Sub

Bueno, creo que con esto tienes para empezar, en otra ocasión te mostraré cómo hacer esto mismo pero sin usar el data control.
En el zip con los listados hay otro proyecto que te permite seleccionar entre una base de Access 97 o una creada con Access 2000

Pulsa este link para bajar el código y las bases de ejemplo. (ADO_datacontrol.zip 19.8 KB)

 

Si quieres ver un ejemplo de cómo acceder a una base de datos usando ADO, pero sin el data control... ¡sígueme!


ir al índice