【问题标题】:ms access vba error 3021 no current recordms访问vba错误3021没有当前记录
【发布时间】:2017-09-25 15:08:44
【问题描述】:

我正在使用 MS Access VBA 从 iSeries 表中导入。有时 IBM 表可以是空的,这没关系。但是,当发生这种情况时,我会收到 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

【问题讨论】:

    标签: vba ms-access


    【解决方案1】:

    解决了 - 只需将代码更改为以下:

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

    【讨论】:

    • 请注意,打开记录集后您不需要rs.MoveFirst - 它始终位于第一条记录(如果有)或 EOF(如果没有)。
    【解决方案2】:

    在使用 rsL.MoveFirst 之前,您需要检查记录集是否为空。 如果 rsL.RecordCount 0 那么 rsL.MoveFirst 结束如果

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-16
      • 2013-06-24
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2020-11-04
      相关资源
      最近更新 更多