Ошибка с .update, так как он не будет обновлять таблицу из-за ошибки времени выполнения 3075 - PullRequest
0 голосов
/ 03 июня 2019

После исправления некоторых проблем безопасности в коде произошла новая ошибка при попытке обновить основную таблицу данных после извлечения из онлайн-базы данных.

Способ извлечения данных неудобен, поскольку у нас нет доступа к фактическому бэкэнду базы данных, поэтому нам нужно очистить его от внешнего интерфейса.как только все данные будут очищены, они добавляются в таблицу путем добавления новых строк.

Это для MicrosoftAccess 2016;последний известный рабочий код датируется апрелем, где он несколько раз завершался с ошибкой, а затем запускался после импорта максимального количества записей.

Поскольку я новичок в VBA, я не знаю, почему не работает оператор .Update function

ReDim SCR_Link_Array(SCR_RowCount), SCR_Number_Array(SCR_RowCount), SCR_Unit_Array(SCR_RowCount), SCR_EquipTag_Array(SCR_RowCount), _
SCR_SCI_Array(SCR_RowCount), SCR_Title_Array(SCR_RowCount), SCR_EquipFail_Array(SCR_RowCount), SCR_Facility_Array(SCR_RowCount), _
SCR_DiscoveryDate_Array(SCR_RowCount), SCR_FileDate_Array(SCR_RowCount), SCR_OccurenceDate_Array(SCR_RowCount)

For row = 0 To SCR_RowCount - 1
    SCR_Link_Array(row) = IE.Document.getElementByID("MainContent_grid").Rows(row + 1).Cells(12).Children(0).href
Next row

With rs
    For row = 0 To SCR_RowCount - 1
        .AddNew
        IE.Navigate (SCR_Link_Array(row))
        Call LoadingWebpage
        SCR_Number_Array(row) = IE.Document.getElementByID("ContentPlaceHolder1_lbl_SCR_No").innerText
        SCR_Unit_Array(row) = IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(23).innerText
        SCR_SCI_Array(row) = EquipTag_Concated()
        SCR_EquipTag_Array(row) = SCI_Concated(SCR_EquipTag_Array(row))
        SCR_Title_Array(row) = IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(11).innerText
        SCR_FileDate_Array(row) = CDate(IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(7).innerText)
        SCR_OccurenceDate_Array(row) = CDate(IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(13).innerText)
        SCR_DiscoveryDate_Array(row) = CDate(IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(17).innerText)
        SCR_Facility_Array(row) = Mid(IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(25).innerText, 3, 1)
        Select Case SCR_Unit_Array(row)
            Case "NWMD"
                SCR_Facility_Array(row) = "W"
            Case "REFURB"
                SCR_Facility_Array(row) = "D"
            Case Else
                SCR_Facility_Array(row) = IE.Document.getElementByID("form1").getElementsByTagName("table")(0).getElementsByTagName("td")(19).innerText
        End Select

        Debug.Print (row)
    Next row
End With
With rs
    For record = 0 To SCR_RowCount - 1

        ![SCR #] = SCR_Number_Array(record)
        ![Unit] = SCR_Unit_Array(record)
        ![System] = SCR_SCI_Array(record)
        ![Equipment] = SCR_EquipTag_Array(record)
        ![Event Title] = SCR_Title_Array(record)
        ![SCR Date] = SCR_FileDate_Array(record)
        ![Date Occured] = SCR_OccurenceDate_Array(record)
        ![Discovery Date] = SCR_DiscoveryDate_Array(record)
        ![Eq Fail] = SCR_EquipFail_Array(record)
        ![Facility] = SCR_Facility_Array(record)


        .Update
        Debug.Print (record)
    Next record
End With

Set rs = Nothing

Код не выполняется на .Update, когда он должен добавить новые элементы в таблицу и создать переход на следующую страницу для сбора дополнительных данных.Точное сообщение об ошибке:

RunTime Ошибка 3075:
в operator () в выражении запроса 3022-Сломано в Main ()

** Редактирование: Добавленополная функция для контекста и уточнения

*** Редактировать: Проблема, вызванная попыткой дублирования записей, из-за характера программы, я не могу принять это.Я переключаюсь на прямую SQL-инъекцию, используя INSERT INTO… VALUES ()

...