l oop через диапазон и вставить уникальные данные для доступа к базе данных - PullRequest
0 голосов
/ 01 марта 2020

Надеюсь, у вас всех хороший день. Я перебираю диапазон из открытой рабочей книги, и для каждого l oop мне нужно проверить, есть ли детали в моей таблице доступа, и если нет, вставить детали. У меня есть следующий код, который, я думаю, должен работать хорошо, но, похоже, в Excel есть проблема с открытием и закрытием RecordSet каждый l oop. Думаю, это проблема в любом случае, так как она не выдает никаких исключений, она просто перестает отвечать, и мне нужно закрыть книгу

l oop само по себе прекрасно работает, как я тестировал без части SQL и он завершил более 100 тысяч записей менее чем за 1 минуту. Любая помощь в этом была бы очень признательна.

With dbConnection
        .Provider = "Microsoft.ACE.OLEDB.12.0;"
        .ConnectionString = dbConnectionString
        .Open
            ItemsAdded = 0
            dbRecordSet.ActiveConnection = dbConnection
            For i = 1 To DataFile.ActiveSheet.Cells(Rows.Count, "A").End(xlUp).Row
                oSQL = _
                "Select * From " & TableName & " Where CompanyName = """ & Trim(DataRange(i, 1)) & """" & _
                " And CommCode = """ & Trim(DataRange(i, 2)) & """;"
                dbRecordSet.Open oSQL, dbConnection

                If dbRecordSet.EOF = True Then 'Does not exist in the access database so add it
                    dbRecordSet.Close
                    dbConnection.Execute "INSERT INTO [" & SearchType & "Table_" & oYear & "] (CompanyName, CommCode, GoodsDescription, MonthsImported, " & _
                    "AddressLine1, AddressLine2, Town_City, County, PostCode) VALUES " & _
                    "(""" & DataRange(i, 1) & """, """ & DataRange(i, 2) & """, """ & Replace(DataRange(i, 3), """", "") & """, """ & DataRange(i, 4) & """, """ & _
                    Replace(DataRange(i, 5), """", "") & """, """ & DataRange(i, 6) & """, """ & DataRange(i, 7) & """, """ & DataRange(i, 8) & """, """ & DataRange(i, 9) & """);"

                    ItemsAdded = ItemsAdded + 1
                Else: dbRecordSet.Close
                End If
            Next i
        .Close
    End With
...