VBA将整个ADODB.Recordset插入表中

时间:2016-03-23 18:06:17

标签: sql-server vba ms-access

我正在尝试在sql server(一些DWH)上运行SQL查询,然后将结果插入到访问表中(使用VBA)。
我是通过使用ADODB.Connection,ADODB.Command和ADODB.Recordset来完成的。在这一点上,我在Recordset中得到了我的结果,我想知道如何在不循环的情况下将其插入表中 我试过了:

If Not (Rs.EOF And Rs.BOF) Then  
    Rs.MoveFirst  
    Do Until Rs.EOF = True  
        DoCmd.RunSQL ("INSERT INTO Table (F1, F2) VALUES ( " & rs![F1] & ", " & rs[F2] & ")" 
        Rs.MoveNext  
    Loop  
End If

但Recordset可能有超过10万行。因此,使用此方法插入它需要很长时间。

另一种非常快速的方法是打开一个新的Excel工作簿,将其粘贴到工作表中,然后导入它。但我想避免它。还有其他办法吗?

--------- EDITED -----------
对不起大家。我的错。我正在用VBA强制解决方案,而linkin则很完美。谢谢 !

2 个答案:

答案 0 :(得分:2)

  

我想知道是否有任何使用Access的快捷方式   仅限资源。

如前所述,链接 SQL表,然后创建一个简单的追加查询,该查询从链接表读取并写入您的Access表,并且您已完成

答案 1 :(得分:0)

我同意你应该尽可能链接的评论者。但我想知道是否可以做到。我最终将记录集转换为逗号分隔文件,并使用TransferText追加它。

Public Sub ImportFromSQLSvr()

    Dim rs As ADODB.Recordset
    Dim cn As ADODB.Connection
    Dim sResult As String
    Dim sFile As String, lFile As Long

    Const sIMPORTFILE As String = "TestImport.txt"

    Set cn = New ADODB.Connection
    cn.Open msCONN
    Set rs = cn.Execute("SELECT SiteID, StoreNumber FROM Site")

    'Add a header row, replace tabs with commas
    sResult = rs.GetString
    sResult = "SiteID, StoreNumber" & vbNewLine & sResult
    sResult = Replace(sResult, vbTab, ",")

    'Write to a text file
    lFile = FreeFile
    sFile = Environ("TEMP") & "\" & sIMPORTFILE
    Open sFile For Output As lFile
        Print #lFile, sResult
    Close lFile

    'Append to table dbo_Site
    DoCmd.TransferText acImportDelim, , "dbo_Site", Environ("TEMP") & "\" & sIMPORTFILE, True

    On Error Resume Next
        rs.Close
        Set rs = Nothing
        cn.Close
        Set cn = Nothing

End Sub

如果您的数据中有逗号,则需要做一些额外的工作才能正确格式化csv。