Trabajar con un Recordset «desconectado»
Por Enrique Martínez Montejo
Última revisión: 06/03/2004
 

El siguiente ejemplo le mostrará cómo trabajar con un objeto Recordset desconectado, insertando, modificando y eliminando registros con un control DataGrid, actualizando los datos de la tabla mediante la ejecución de una actualización por lotes.

El ejemplo trabajará con una copia de la tabla Clientes de la base de datos Neptuno, de esta forma impedimos que la tabla  original queda dañada.

Para ejecutar el ejemplo necesitará insertar un control DataGrid y dos controles CommandButton en el formulario de inicio del proyecto. Copie y pegue el siguiente código en la sección Declaraciones del formulario de inicio del proyecto.

Option Explicit

' Declaración de variables objeto a nivel del formulario
Private mCnn As ADODB.Connection
Private mRst As ADODB.Recordset

Private Sub Command1_Click()
    ' Conectamos el Recordset para proceder a la
    ' actualización

    Set mRst.ActiveConnection = mCnn

    ' Actualizamos el conjunto de datos
    mRst.UpdateBatch

    ' Desconectamos de nuevo el objeto Recordset
    Set mRst.ActiveConnection = Nothing

End Sub

Private Sub Command2_Click()

    If (MsgBox("¿Desea eliminar la tabla temporal?", _
        vbInformation + vbYesNo) = vbYes) Then
        '
        ' Eliminamos la tabla ...
        mCnn.Execute "DROP TABLE Tabla1"

        ' Descargamos el formulario
        Unload Me
    End If

End Sub

Private Sub Form_Load()

    On Error GoTo ErrFormLoad

    ' Configuramos los distintos controles del formulario
    Command1.Caption = "Actualizar"
    Command2.Caption = "Eliminar tabla temporal"

    With DataGrid1
        .AllowAddNew = True
        .AllowDelete = True
    End With

    ' Creamos un nuevo objeto Connection

    Set mCnn = New ADODB.Connection

    ' Abrimos la conexión
    With mCnn
        .Provider = "Microsoft.Jet.OLEDB.4.0"
        .ConnectionString = "Data Source = C:\Mis documentos\Neptuno.mdb"
        .Open
    End With

    ' Creamos la tabla de prueba, copiando la estructura
    ' de la tabla Clientes

    mCnn.Execute "SELECT * INTO Tabla1 FROM Clientes WHERE 1=0"

    ' Creamos un nuevo objeto Recordset
    Set mRst = New ADODB.Recordset

    ' Configuramos y abrimos el Recordset
    With mRst
        .CursorLocation = adUseClient
        .CursorType = adOpenStatic
        .LockType = adLockBatchOptimistic
        .Open "Tabla1", mCnn, , , adCmdTable
    End With

    ' Enlazamos el control DataGrid con el objeto Recordset
    Set DataGrid1.DataSource = mRst

    ' Desconectamos el objeto Recordset
    Set mRst.ActiveConnection = Nothing

    Exit Sub

ErrFormLoad:
    If (Err.Number = -2147217900) Then
        If (MsgBox("La tabla ya existe. ¿Desea eliminarla?", _
            vbInformation + vbYesNo) = vbYes) Then
            '
            ' Eliminamos la tabla ...

            mCnn.Execute "DROP TABLE Tabla1"
            ' ... y la volvemos a crear
            Resume
        End If
    End If

    Resume Next
End Sub

Private Sub Form_Unload(Cancel As Integer)

    mRst.Close
    mCnn.Close
    Set mRst = Nothing
    Set mCnn = Nothing

End Sub

 

Otros enlaces de interés:

Indice de Ejemplos de ADO


Enrique Martínez Montejo - 2004

NOTA: La información contenida en este artículo, así como el código fuente incluido en el mismo, se proporciona COMO ESTÁ, sin garantías de ninguna clase, y no otorga derecho alguno. Usted asume cualquier riesgo al poner en práctica, utilizar o ejecutar lo explicado, recomendado o sugerido en el presente artículo.

NOTE: The information contained in this article and source code included therein, is provided AS IS without warranty of any kind, and confers no rights. You assume any risk to implement, use or run it explained, recommended or suggested in this article.