2017-09-25 114 views
0

我使用MS Access VBA从iSeries表导入。有时IBM表可以是空的,这没关系。但是,如果发生这种情况,我会收到VBA错误3021 - 是否需要更改我的代码,或者我是否可以抑制错误消息。这里是我的代码:ms access vba error 3021 no current record

Set rs = New ADODB.Recordset 
rs.Open sSQL, cn, adOpenDynamic, adLockOptimistic 

'Open recordset to local table 
Set rsL = New ADODB.Recordset 
rsL.Open sTBL, CurrentProject.Connection, adOpenDynamic, adLockOptimistic 

rs.MoveFirst 
Debug.Print "AS400" 
Do Until rs.EOF 
    Debug.Print rs.Fields("DROP"), rs.Fields("STDATE"), rs.Fields("ENDATE") 
    rsL.AddNew 
    rsL.Fields("DROP") = rs.Fields("DROP") 
    rsL.Fields("STDATE") = rs.Fields("STDATE") 
    rsL.Fields("ENDATE") = rs.Fields("ENDATE") 
    rsL.Update 
    rs.MoveNext 
Loop 

'Test to check if above code actually worked 
rsL.MoveFirst 
Debug.Print "Local" 
Do Until rsL.EOF 
    Debug.Print rsL.Fields("DROP"), rsL.Fields("STDATE"), rsL.Fields("ENDATE") 
    rsL.MoveNext 
Loop 

'Clear memory 
Set rs = Nothing 
Set rsL = Nothing 
Set cn = Nothing 

回答

0

解决了这个问题 - 只是改变了代码以下:

'rs.MoveFirst 
Debug.Print "AS400" 
Do Until rs.EOF 
rs.MoveFirst 
+1

注意不要打开一个记录之后需要'rs.MoveFirst' - 它总是在第一个记录(如果有的话)或EOF(如果没有)。 – Andre

+0

好的 - 谢谢你的提示 – Michael