我想将所有行从Excel工作表(shReceiver
)上传到MS Access表(tblReceiver
)。
在Excel以及访问表(TNR
)中都有一个主键-tblReceiver
(票号)。因此,我首先检查TNR
中是否存在shReceiver
中的tblReceiver
。如果是这样,那么我将删除tblReceiver
中的数据。然后,我将所有数据从shReceiver
附加到tblReeiver
。
但是,Access DB中的许多查询都与tblReceiver
相关联,这使该过程极其缓慢(执行需要30分钟以上)。更新tblReceiver
时,有什么方法可以禁用其他Access DB查询或索引吗?
请注意,我在tblReceiver
中有约70k记录和74列,在shReceiver
中有10k +数据要上传。
我的代码如下:
Public Sub ExportReceiver()
Dim lastRow, var_Range_Count As Long
Dim sh As Worksheet
Set sh = ThisWorkbook.Sheets("Receiver")
lastRow = sh.Cells(Rows.Count, 2).End(xlUp).Row
Call databaseCon
For var_Range_Count = 3 To lastRow
cnn.Execute "DELETE * FROM tblReceiver WHERE tblReceiver.[TNR] =" & "'"
& sh.Range("A" & var_Range_Count).Value & "'", dbFailOnError
Next
Call CloseDB
Dim acc As New ACCESS.Application
acc.OpenCurrentDatabase ThisWorkbook.Path & "\TicketsDB.accdb"
acc.DoCmd.TransferSpreadsheet _
TransferType:=acImport, _
SpreadSheetType:=acSpreadsheetTypeExcel12Xml, _
TableName:="tblReceiver", _
FileName:=Application.ActiveWorkbook.FullName, _
HasFieldNames:=True, _
Range:="Receiver$A2:BX" & lastRow
acc.CloseCurrentDatabase
acc.Quit
Set acc = Nothing
End Sub
答案 0 :(得分:1)
不导入Excel数据,而是将它们链接为链接表。
然后使用该表作为合并的更新/追加查询中的源,如下所述:
Compare two tables and update or insert data
这将一口气运行。