Copiar la estructura de un Recordset existente en otro objeto Recordset
Por Enrique Martínez Montejo
Última revisión: 06/03/2004
 

El siguiente ejemplo implementa una función que devolverá un objeto Recordset que contendrá la misma estructura que el objeto Recordset pasado en el argumento de la función.

Una vez que la función haya devuelto el objeto Recordset, podemos abrirlo mediante el método Open disponiendo así de un objeto Recordset desconectado, donde podemos añadirle registros para guardarlo posteriormente en un archivo con formato de Lenguaje de Marcado Extensible (XML).

Para ejecutar el ejemplo necesitará insertar un control 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.

Private Sub Form_Load()

    Dim cnn As ADODB.Connection
    Dim rst As ADODB.Recordset
    Dim rstCopy As ADODB.Recordset

    ' Creamos un nuevo objeto Connection
    Set cnn = New ADODB.Connection

    ' Abrimos la conexión
    With
cnn
        .Provider = "SQLOLEDB"
        .ConnectionString = "Persist Security Info=False;" & _
                "Data Source=NOMBRE_INSTANCIA_SQL2000;" & _
                "Integrated Security=SSPI;" & _
                "Initial Catalog=Northwind"
        .Open
    End With

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

    ' Configuramos y abrimos el Recordset
    With rst
        .CursorType = adOpenDynamic
        .LockType = adLockOptimistic
        .Open "Employees", cnn, , , adCmdTable
    End With

    ' Copiamos la estructura del Recordset
    Set rstCopy = CopyRecordset(rst)

    ' Cerramos los objetos Connection y Recordset principales
    rst.Close
    cnn.Close

    ' Creamos un archivo XML con la estructura
    ' del Recordset copiado, por lo que antes debemos
    ' de abrir el objeto Recordset
    '

    rstCopy.Open
    rstCopy.Save "C:\Mis documentos\Employees.xml", adPersistXML

End
Sub

Private Function CopyRecordset(ByVal rs As ADODB.Recordset) As ADODB.Recordset

    Dim oCopyRst As ADODB.Recordset
    Dim fld As ADODB.Field

    Set oCopyRst = New ADODB.Recordset

    ' Recorremos la colección de campos para ir
    ' copiándolos con las mismas propiedades

    For Each fld In rs.Fields
        oCopyRst.Fields.Append _
            fld.Name, _
            fld.Type, _
            fld.DefinedSize, _
            fld.Attributes

        ' Tenemos en cuenta las propiedades de precisión y
        ' escala numérica para los tipos de datos numéricos
        ' que tengan establecidas dichas propiedades.
       
If ((fld.Type = adNumeric) Or (fld.Type = adDecimal)) Then
            With oCopyRst
                .Fields(.Fields.Count - 1).Precision = fld.Precision
                .Fields(.Fields.Count - 1).NumericScale = fld.NumericScale
            End With
        End If
    Next

    ' Devolvemos el nuevo objeto Recordset
    Set CopyRecordset = oCopyRst

End Function

 

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.