我正在尝试在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则很完美。谢谢 !
答案 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。