Ver Mensaje Individual
  #19 (permalink)  
Antiguo 23/08/2006, 07:14
Avatar de elsaky
elsaky
 
Fecha de Ingreso: junio-2006
Ubicación: Buenos Aires, Argentina
Mensajes: 53
Antigüedad: 17 años, 10 meses
Puntos: 0
Copiar la estructura de un Recordset existente en otro objeto Recordset
Por Enrique Martínez Montejo «SoftJaén»


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