Recordset.Add新的ADO VBA生成行句柄引用了已删除的行或标记为删除的行



我使用以编程方式将多条记录添加到共享点列表中,以节省在共享点上使用表单的时间,因为有时我必须在任何给定时间添加多达50个条目。它运行得很好,然后宏也被该地区的其他人共享使用,一旦完成,它就不再工作了。一旦到达rst,我就会得到引用到已删除行或标记为删除错误的行的Row句柄。添加新内容。我可以获取记录集并将其全部显示出来,而且它与sharepoint列表中显示的内容相匹配,所以我不完全确定它为什么突然停止工作。我知道循环遍历所有内容并不是最有效的方法,最好将其全部写入数组,但我当时正处于时间紧张状态,此时使用蛮力更容易写入。

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

我今天再次出现错误,所以尝试了Tim的解决方案,但没有成功。在处理了一天的大部分时间之后,我尝试只执行一个直接的INSERT语句,并只将一条新记录加载到列表中,这给了我一个新的错误,说它无法插入记录,因为其中一个字段的数据是不允许的。有些字段仅限于某些选项,事实证明,我的一些数据中有一个拼写错误,excel将有关记录挂起删除的错误作为一般错误给出,而不是给出数据不允许的错误。一旦我纠正了打字错误,一切都很顺利。希望发布解决方案,以防其他人遇到此随机错误。老实说,如果我实现了我想要的数据验证,但没有时间,这就不会成为问题。

如果只需要添加新行,则使用只返回空记录集的查询:例如"SELECT * FROM [FRC] where 1=0;"

空记录集仍然具有添加新记录所需的所有字段,但没有其他记录,因此不会遇到任何争用问题。

最新更新