2017-09-25 1 views
0

Microsoft Access VBA를 사용하여 iSeries 테이블에서 가져옵니다. 가끔 IBM 테이블은 비어있을 수 있습니다. 그러나 VBA 오류 3021이 발생하면 코드를 변경해야합니까? 아니면 오류 메시지를 표시하지 않을 수 있습니까? 여기 내 코드입니다 :ms 액세스 vba 오류 3021 현재 레코드가 없습니다.

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` 필요하지 않습니다

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

주 - 그것은에 항상 첫 번째 레코드 (있는 경우) 또는 EOF (없는 경우). – Andre

+0

아 - 팁 주셔서 고마워요. – Michael

관련 문제