2015-10-15 1 views
0

В принципе, у меня есть код, который обновляет Access из Excel, он делает это, видя, что «контрольный идентификатор» равен «Инджид», который по сути является идентификатором мониторинга. Таким образом, в основном, если они совпадают, код нуждается в обновлении поля в таблице доступа с пометкой «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

EDIT: Это не проблема.

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

Если MonitorID это число, то 'не принадлежит там, вам нужны только для строк.
Итак:

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

Хотя я не уверен, что это решит проблему, к сожалению Jet довольно снисходителен такого рода ошибок.

+0

Проблема в том, что это не число, хотя каждый из них уникален, он также содержит буквы и в конце, поэтому, например, это может быть 16SC в качестве идентификатора. – Calum

+0

Итак, вы указали переменную 'lngID' (как в« Long ») для максимальной путаницы? :-) @Calum – Andre

+0

Ха, извините, я пробовал как String и не повезло. :(@ Andre451 – Calum

Смежные вопросы