既存のレコードセットのクローンを Excel レコードセットに作成します
-
12-09-2019 - |
質問
Excel ファイルにインポートするために必要なすべてのデータを含むレコードセットがあります。Excel ファイルを開いたときに作成されたレコードセットにライブ レコードセットのクローンを作成する方法はありますか?
これが私が今試していることですが、運がありません。
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
ありがとう。
解決
あなたがこれを行うと: -
Set excelRecordset = recordset.clone
あなたは新しいレコードを参照して(そしてそれがクローズ)Excelスプレッドシート上で開かれたレコードセットへの参照を交換してください。この新しいレコードセットは、Excelスプレッドシートに接続され、とにかくではありません。
、先に、ソースレコードセットをFor Each
をAddNew
元から宛先とUpdate
に各フィールドを割り当てることができますが、本当に多くの選択肢を持っていないレコードセットを使用します。
他のヒント
エクセル 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
で説明されている構文 このナレッジベースの記事
所属していません StackOverflow