私はVBAモジュールにADOレコードセットを入力しました。また、レコードセットとまったく同じ構造を持つACCESSにテーブルがあります。
次に、各データセットレコードをループする(これで問題ありません)を使用して、テーブルにデータを入力します。
私が思っていること:レコードセット全体をアクセステーブルに挿入する方法はありますか? (そしてより重要なこと:これはかなり速くなるでしょうか)
以下は、切断されたレコードセットを使用してレコードを追加する方法を示す基本的な例(この場合はExcelから実行)です。
Sub Tester()
Dim con As ADODB.Connection, rs As ADODB.Recordset
Dim i As Long
Set con = getConn()
Set rs = New ADODB.Recordset
rs.CursorLocation = adUseClient '<<<< important!
'get an empty recordset to add new records to
rs.Open "select * from Table1 where false", con, _
adOpenDynamic, adLockBatchOptimistic
'disconnect the recordset and close the connection
Set rs.ActiveConnection = Nothing
con.Close
Set con = Nothing
'add some new records to our test recordset
For i = 1 To 100
rs.AddNew
rs("UserName") = "Newuser_" & i
Next i
'reconnect to update
Set con = getConn()
Set rs.ActiveConnection = con
rs.UpdateBatch '<<< transfer to DB happens here: no loop!
rs.Close
'requery to demonstrate insert was successful
rs.Open "select * from Table1", con, _
adOpenDynamic, adLockBatchOptimistic
Do While Not rs.EOF
Debug.Print rs("ID").Value, rs("UserName").Value
rs.MoveNext
Loop
rs.Close
con.Close
End Sub
Function getConn() As ADODB.Connection
Dim rv As New ADODB.Connection
Dim strConn As String
strConn = "Provider=Microsoft.ACE.OLEDB.12.0;" _
& "Data Source = " & ThisWorkbook.Path & "\Test.accdb"
rv.Open strConn
Set getConn = rv
End Function
VBAレコードセットは、ハードディスクに保存された実際の物理形式(csv、txt、xlsx、xml、データベース一時テーブル)に含まれるまで、実行時に呼び出されるメモリに仮想的に存在します。これは、RまたはPython pandas、SAS datasets、PHP arrays、and other data structuresのデータフレームに似ています。
ADOを CopyFromRecordset メソッドを使用してこのような形式でExcelスプレッドシートにエクスポートし、csv、txt、xlsx、またはxmlとして保存することを検討してください。あるいは、 Save xmlのような永続的なフォーマットタイプでレコードセットを保存するメソッド。
次に、自動データ移行機能を使用して、結果のファイルをMS Accessテーブルに追加します。
DoCmd.TransferSpreadsheet
DoCmd.TransferText
Application.ImportXML
INSERT INTO
SQLクエリを追加いいえ。メソッドSetRows
に対して、GetRows
になる可能性のある逆の等価物はありません。