2009-09-21 4 views
1

У меня есть набор записей, содержащий все данные, необходимые для импорта в файл Excel. Есть ли способ, которым я могу клонировать свой живой набор записей в тот, который был создан при открытии файла Excel?Clone existing recordset to excel recordset

Вот что я пытаюсь сейчас без везения.

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 

спасибо.

ответ

1

Когда вы сделаете это: -

Set excelRecordset = recordset.clone 

Вы замените ссылку на открывшейся записей электронной таблицы Excel (и закрывается) со ссылкой на новый набор записей. Этот новый набор записей никоим образом не связан с электронной таблицей Excel.

Использование набора записей вы на самом деле не имеют большого выбора, кроме как через For Each источника записей, AddNew по назначению, присвоить каждому полю от источника к месту назначения и Update.

+0

Вот что я боялся. Для каждого цикла это, спасибо. :) – user141594

0

В объектах Excel Range есть метод CopyFromRecordset, который должен выполнять эту работу. Если вы можете создать объект Excel.Application и открыть книгу, которую хотите записать, тогда вы сможете ее использовать.

Так что, если ваш существующий набор записей с именем rs и уже заселены, код VBA будет:

Worksheets("SHEET1").Cells(2, 1).CopyFromRecordset rs 

Вы можете перебрать rs.Fields для заполнения имен полей

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 

Не уверен, как легко было бы перевести на ваш сценарий.

В качестве альтернативы, если он доступен с водителем, который вы используете, вы можете посмотреть в SELECT INTO и INSERT INTO синтаксиса, описанного в this Knowledge Base article