从Excel更新访问表 - 说当前记录已被删除?
问题描述:
基本上我在这里有一些代码更新来自Excel的Access,它通过查看'监视ID'是否等于基本上是监视ID的'IngID'来做到这一点。所以基本上如果它们匹配,代码需要将更新标记为“TOWN”的访问表中的字段。从Excel更新访问表 - 说当前记录已被删除?
但是,当我这样做时,我得到一个错误在.Fields("TOWN") = Cells(lngRow, 74).Value
。错误是:“运行时错误3021 BOF或EOF为True,或当前记录已被删除,请求的操作需要当前记录。” 该记录确实存在于表格中,并且我尝试过使用多个记录,但它似乎仍然无法正常工作,有什么想法?
Application.ScreenUpdating = False ' Prevents screen refreshing.
Dim cnn As ADODB.Connection
Dim rst As ADODB.Recordset
Dim fld As ADODB.Field
Dim MyConn
Dim lngRow As Long
Dim lngID, LR, Upd
Dim sSQL As String
LR = Range("BN" & Rows.Count).End(xlUp).Row
Upd = LR - 1
lngRow = 1
Do While lngRow <= LR
lngID = Cells(lngRow, 66).Value
sSQL = "SELECT * FROM Tbl_Primary WHERE MonitorID = '" & lngID & "'"
Set cnn = New ADODB.Connection
MyConn = "Provider = Microsoft.ACE.OLEDB.12.0;" & _
"Data Source =location of access file.mdb"
With cnn
.Provider = "Microsoft.ACE.OLEDB.12.0"
.Open MyConn
End With
Set rst = New ADODB.Recordset
rst.CursorLocation = adUseServer
rst.Open sSQL, ActiveConnection:=cnn, _
CursorType:=adOpenKeyset, LockType:=adLockOptimistic
'Load all records from Excel to Access.
With rst
'
.Fields("TOWN") = Cells(lngRow, 74).Value
rst.Update
End With
' Close the connection
rst.Close
cnn.Close
Set rst = Nothing
Set cnn = Nothing
lngRow = lngRow + 1
Loop
MsgBox "Update Complete"
答
编辑:这不是问题。
sSQL = "SELECT * FROM Tbl_Primary WHERE MonitorID = '" & lngID & "'"
如果MonitorID
是一个号码,“不属于那里,你只需要其中的字符串。
所以:
sSQL = "SELECT * FROM Tbl_Primary WHERE MonitorID = " & lngID
虽然我不能肯定它会解决这个问题,遗憾的是Jet是相当宽容与这些那样的失误。
这就是问题,它不是一个数字,尽管每个都是唯一的,它在最后还包括字母,所以例如它可能是16SC作为ID。 – Calum
好吧,所以你将变量'lngID'命名为“Long”,以免造成最大的混淆? :-) @Calum – Andre
哈哈对不起,我已经尝试了字符串,也没有运气。 :(@ Andre451 – Calum