Обновление Excel VBA или вставка в существующую таблицу доступа с зависимостями - PullRequest
0 голосов
/ 03 марта 2019

Я хочу загрузить все строки из листа 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

1 Ответ

0 голосов
/ 03 марта 2019

Не импортируйте данные Excel, а связывайте их как связанную таблицу .

Затем используйте эту таблицу в качестве источника в комбинированном запросе на обновление / добавление, как описано здесь:

Сравните две таблицы и обновите или вставьте данные

Это будет выполнено за один раз.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...