
23/08/2006, 07:14
|
 | | | Fecha de Ingreso: junio-2006 Ubicación: Buenos Aires, Argentina
Mensajes: 53
Antigüedad: 18 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 |