2015-10-15 99 views
0

基本上我在這裏有一些代碼更新來自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" 

回答

0

編輯:這不是問題。

sSQL = "SELECT * FROM Tbl_Primary WHERE MonitorID = '" & lngID & "'" 

如果MonitorID是一個號碼,「不屬於那裏,你只需要其中的字符串。
所以:

sSQL = "SELECT * FROM Tbl_Primary WHERE MonitorID = " & lngID 

雖然我不能肯定它會解決這個問題,遺憾的是Jet是相當寬容與這些那樣的失誤。

+0

這就是問題,它不是一個數字,儘管每個都是唯一的,它在最後還包括字母,所以例如它可能是16SC作爲ID。 – Calum

+0

好吧,所以你將變量'lngID'命名爲「Long」,以免造成最大的混淆? :-) @Calum – Andre

+0

哈哈對不起,我已經嘗試了字符串,也沒有運氣。 :(@ Andre451 – Calum

相關問題