После исправления некоторых проблем безопасности в коде произошла новая ошибка при попытке обновить основную таблицу данных после извлечения из онлайн-базы данных.
Способ извлечения данных неудобен, поскольку у нас нет доступа к фактическому бэкэнду базы данных, поэтому нам нужно очистить его от внешнего интерфейса.как только все данные будут очищены, они добавляются в таблицу путем добавления новых строк.
Это для 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 ()