Я программно добавляю несколько записей в список точек обмена, чтобы сэкономить время по сравнению с использованием формы на точке обмена, поскольку иногда мне приходится добавлять до 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
Если все, что вам нужно сделать, это добавить новые строки, используйте запрос, который просто возвращает пустой набор записей: например. "SELECT * FROM [FRC] where 1=0;"
В пустом наборе записей по-прежнему есть все поля, необходимые для добавления новых записей, но нет других записей, поэтому вы не столкнетесь с конфликтами.
Сегодня снова получил ошибку, загрузка пустого набора записей не устранила проблему
Я понятия не имею, почему это сообщение может появиться. Вместо этого вы всегда можете попробовать выполнить вставку: stackoverflow.com/questions/66194957/…
На самом деле я сделал это, что дало мне новую ошибку, которая привела меня к решению, которое я только что опубликовал ниже. Некоторые поля ограничены определенными параметрами, и у меня была опечатка в некоторых моих данных, и Excel выдавал ошибку ожидания удаления как общую ошибку.
Я видел ваш пост после того, как оставил этот комментарий - приятно видеть, что вы это поняли.
Спасибо за всю помощь, я действительно бился головой об стену с этим.
Сегодня я снова получил ошибку, поэтому безрезультатно пробовал решение от Тима. Провозившись с ним большую часть дня, я попытался выполнить только прямой оператор INSERT и загрузить в список только одну новую запись, что дало мне новую ошибку, говорящую о том, что не удалось вставить запись, поскольку данные для одного из поля были запрещены. Некоторые поля ограничены определенными параметрами, и оказалось, что у меня была опечатка в некоторых моих данных, и Excel выдавал ошибку о записи, ожидающей удаления, как общую ошибку, а не выдавал ошибку, что данные не разрешены. Как только я исправил опечатку, все заработало отлично. Хотел опубликовать решение на случай, если кто-то еще столкнется с этой случайной ошибкой. Честно говоря, если бы я реализовал проверку данных, как хотел, но не имел на это времени, это не было бы проблемой.
Он снова начал работать нормально, как только я увеличил набор данных, который добавлял, и с тех пор у меня не было никаких проблем, но ваш ответ имеет большой смысл, поэтому я его принял. как вы сказали, не может быть конфликта в записях, если их нет.