Clonar registros existente para sobresalir de registros
-
12-09-2019 - |
Pregunta
Tengo un conjunto de registros que contiene todos los datos necesarios para importar a un archivo de Excel. ¿Hay alguna manera de clonar mi conjunto de registros en vivo en el creado al abrir un archivo de Excel?
Esto es lo que estoy tratando ahora sin suerte.
Dim connection : Set connection = Server.CreateObject("ADODB.Connection")
connection.Open "Driver={Microsoft Excel Driver (*.xls)}; DriverId=790;
Dbq=c:\MyExcel.xls;" & _
"DefaultDir=c:\; ReadOnly=False;"
Dim excelRecordset : Set excelRecordset = Server.CreateObject("ADODB.Recordset")
excelRecordset.Open "[SHEET1$]", connection, 2, 3
excelRecordset.AddNew
Set excelRecordset = recordset.clone
excelRecordset.Update
excelRecordset.Close
Gracias.
Solución
Al hacer esto: -
Set excelRecordset = recordset.clone
sustituir la referencia al conjunto de registros abierto en la hoja de cálculo Excel (y cierra) con una referencia al nuevo conjunto de registros. Este nuevo conjunto de registros no es de ninguna manera conectado a la hoja de cálculo Excel.
El uso de conjuntos de registros que en realidad no tiene más remedio que For Each
a través del conjunto de registros de origen, AddNew
en el destino, asignar a cada campo del origen al destino y Update
.
Otros consejos
Los objetos Range
Excel tienen un método CopyFromRecordset
que debe hacer el trabajo. Si se puede crear un objeto Excel.Application
y abra el libro que desea escribir, entonces debería ser capaz de utilizar este.
Así que si el conjunto de registros existentes se nombra rs
y haya sido rellenada, el código en VBA sería:
Worksheets("SHEET1").Cells(2, 1).CopyFromRecordset rs
A continuación, puede iterar sobre rs.Fields
para llenar los nombres de los campos
Dim fld As Field
Dim i As Integer
i = 1
With Worksheets("SHEET1")
For Each fld in rs.Fields
.Cells(1, i).Value = fld.Name
i = i + 1
Next fld
End With
No está seguro de lo fácil que sería para traducir a su escenario sin embargo.
Como alternativa, si está disponible con el controlador que está utilizando, es posible que desee ver en la sintaxis y SELECT INTO
INSERT INTO
se describe en este artículo de Knowledge Base