Recordset.AddNew ADO VBA, генерирующий дескриптор строки, ссылающийся на удаленную строку или строку, помеченную для удаления

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

Sub FRC_Upload()

Dim Connect As ADODB.Connection
Dim rst As ADODB.Recordset
Dim mySQL As String
Dim LastRow As Long
Dim MyWorkbook As Workbook


Set MyWorkbook = Workbooks("FRC Upload.xlsm")


LastRow = MyWorkbook.Sheets("Data").Cells(Rows.Count, 1).End(xlUp).Row


Set Connect = New ADODB.Connection
Set rst = New ADODB.Recordset


mySQL = "SELECT * FROM [FRC];"


With Connect
    .ConnectionString = _
    "Provider=Microsoft.ACE.OLEDB.12.0;WSS;IMEX=0;RetrieveIds=Yes;DATABASE=URL for my sharepoint list;"
    .Open
End With

rst.Open mySQL, Connect, adOpenDynamic, adLockOptimistic


    For i = 2 To LastRow

        rst.AddNew
            rst.Fields("Title") = MyWorkbook.Sheets("Data").Range("A" & i)
            rst.Fields("MA") = MyWorkbook.Sheets("Data").Range("B" & i)
            rst.Fields("ScheduleDate") = MyWorkbook.Sheets("Data").Range("C" & i)
            rst.Fields("AccountNumber") = MyWorkbook.Sheets("Data").Range("D" & i)
            rst.Fields("WorkorderNumber") = MyWorkbook.Sheets("Data").Range("E" & i)
            rst.Fields("WorkOrderType") = MyWorkbook.Sheets("Data").Range("F" & i)
            rst.Fields("RescheduleClassification") = MyWorkbook.Sheets("Data").Range("G" & i)
            rst.Fields("Comments") = MyWorkbook.Sheets("Data").Range("H" & i)
    
    Next

    rst.Update


    If CBool(rst.State And adStateOpen) = True Then rst.Close
    If CBool(Connect.State And adStateOpen) = True Then Connect.Close

End Sub
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
0
38
2
Перейти к ответу Данный вопрос помечен как решенный

Ответы 2

Если все, что вам нужно сделать, это добавить новые строки, используйте запрос, который просто возвращает пустой набор записей: например. "SELECT * FROM [FRC] where 1=0;"

В пустом наборе записей по-прежнему есть все поля, необходимые для добавления новых записей, но нет других записей, поэтому вы не столкнетесь с конфликтами.

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

DizturbdOne 23.03.2022 18:34

Сегодня снова получил ошибку, загрузка пустого набора записей не устранила проблему

DizturbdOne 06.04.2022 21:15

Я понятия не имею, почему это сообщение может появиться. Вместо этого вы всегда можете попробовать выполнить вставку: stackoverflow.com/questions/66194957/…

Tim Williams 06.04.2022 21:19

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

DizturbdOne 06.04.2022 21:21

Я видел ваш пост после того, как оставил этот комментарий - приятно видеть, что вы это поняли.

Tim Williams 06.04.2022 21:41

Спасибо за всю помощь, я действительно бился головой об стену с этим.

DizturbdOne 06.04.2022 21:42
Ответ принят как подходящий

Сегодня я снова получил ошибку, поэтому безрезультатно пробовал решение от Тима. Провозившись с ним большую часть дня, я попытался выполнить только прямой оператор INSERT и загрузить в список только одну новую запись, что дало мне новую ошибку, говорящую о том, что не удалось вставить запись, поскольку данные для одного из поля были запрещены. Некоторые поля ограничены определенными параметрами, и оказалось, что у меня была опечатка в некоторых моих данных, и Excel выдавал ошибку о записи, ожидающей удаления, как общую ошибку, а не выдавал ошибку, что данные не разрешены. Как только я исправил опечатку, все заработало отлично. Хотел опубликовать решение на случай, если кто-то еще столкнется с этой случайной ошибкой. Честно говоря, если бы я реализовал проверку данных, как хотел, но не имел на это времени, это не было бы проблемой.

Другие вопросы по теме