Я хочу загрузить все строки из листа Excel (shReceiver
) в таблицу MS Access (tblReceiver
).
Существует один первичный ключ - TNR
(номер билета) как в Excel, так и в таблице доступа (tblReceiver
).Итак, сначала я проверяю, существует ли TNR
из shReceiver
в tblReceiver
.Если так, то я удаляю данные в tblReceiver
.Затем я добавляю все данные от shReceiver
к tblReeiver
.
. Однако многие запросы в базе данных Access связаны с tblReceiver
, что делает этот процесс чрезвычайно медленным (30 минут плюс для выполнения).Есть ли способ отключить другие запросы или индексы БД Access при обновлении tblReceiver
?
Обратите внимание, что у меня есть около 70k + записей с 74 столбцами в tblReceiver
и 10k + данных для загрузки в shReceiver
.
Мой код выглядит следующим образом:
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