Recordset.AddNew ADO VBA 生成引用已删除行或标记为删除的行的行句柄
Recordset.AddNew ADO VBA generating Row handle referred to a deleted row or a row marked for deletion
我正在以编程方式将几条记录添加到共享点列表中,以节省在共享点上使用表单的时间,因为我有时必须在任何给定时间添加多达 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
如果您需要做的只是添加新行,那么使用仅 returns 一个空记录集的查询:例如。 "SELECT * FROM [FRC] where 1=0;"
空记录集仍然包含您添加新记录所需的所有字段,但没有其他记录,因此您不会运行陷入任何争用问题。
我今天又遇到了这个错误,所以尝试了 Tim 的解决方案,但无济于事。在弄乱了一天的大部分时间之后,我尝试只做一个直接的 INSERT 语句并只将一个新记录加载到列表中,这给了我一个新的错误,说它无法插入记录,因为其中一个的数据字段是不允许的。有些字段仅限于某些选项,结果我的一些数据有错别字,excel 将有关记录待删除的错误作为一般错误给出,而不是给出数据不存在的错误不允许。一旦我完美地纠正了错字的所有内容 运行 。想要 post 解决方案,以防其他人遇到此 运行dom 错误。老实说,如果我像我想的那样实施了数据验证但没有时间这样做就不会成为问题。
我正在以编程方式将几条记录添加到共享点列表中,以节省在共享点上使用表单的时间,因为我有时必须在任何给定时间添加多达 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
如果您需要做的只是添加新行,那么使用仅 returns 一个空记录集的查询:例如。 "SELECT * FROM [FRC] where 1=0;"
空记录集仍然包含您添加新记录所需的所有字段,但没有其他记录,因此您不会运行陷入任何争用问题。
我今天又遇到了这个错误,所以尝试了 Tim 的解决方案,但无济于事。在弄乱了一天的大部分时间之后,我尝试只做一个直接的 INSERT 语句并只将一个新记录加载到列表中,这给了我一个新的错误,说它无法插入记录,因为其中一个的数据字段是不允许的。有些字段仅限于某些选项,结果我的一些数据有错别字,excel 将有关记录待删除的错误作为一般错误给出,而不是给出数据不存在的错误不允许。一旦我完美地纠正了错字的所有内容 运行 。想要 post 解决方案,以防其他人遇到此 运行dom 错误。老实说,如果我像我想的那样实施了数据验证但没有时间这样做就不会成为问题。