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
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.