【问题标题】:Attempt to delete subform record returns "No current record"尝试删除子表单记录返回“无当前记录”
【发布时间】:2012-02-09 21:57:48
【问题描述】:

使用 Access 2010。我有两个子表单 fromto。我在主窗体上有两个按钮,addRecord 使用来自from 的当前选定记录和主窗体的值向to 添加新记录,deleteRecord 当前删除to选定的记录。

这是两个按钮的代码:

Private Sub addRecord_Click()

Dim contactid As Long
Dim requestid As Long
Dim startDate As Date

contactid = Me.from_subform.Controls("contactID").Value
requestid = Me.ID.Value
startDate = Me.startDate.Value

With Me.to_subform.Form.RecordsetClone
    .AddNew
    !AEid = contactid
    !requestid = requestid
    !startDate = startDate
    .Update
End With

Me.to_subform.Form.Requery
Me.from_subform.Form.Requery

End Sub

Private Sub deleteRecord_Click()

If Me.to_subform.Form.RecordsetClone.RecordCount = 0 Then
    Exit Sub
End If

Me.to_subform.Form.Recordset.Delete
Me.to_subform.Form.Recordset.MoveNext
Me.from_subform.Form.Requery


End Sub

from 被重新查询是因为它的某些字段取决于to 中是否有相应的记录。

问题是,当我在to 中有一条记录,然后我使用addRecord 添加另一条记录时,当我尝试使用deleteRecord 删除第一条记录时,出现以下错误:

Run-time error '3021':
No current record.

我可以选择to中除第一条以外的任何其他记录,然后删除;另外,如果to 为空并且我向其中添加了一条记录,那么我可以将其删除。一旦我删除了to 中的另一条记录,我就可以选择第一个并删除它。

如何删除第一条记录而不必先删除另一条记录?

编辑:在调试器中进一步检查记录集,当我收到 No current record 错误时,.BOF.EOF 都是 False,但 .AbsolutePosition 是 -1。

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    你可以试试

    Me.to_subform.Form.Recordset.MoveFirst
    

    在删除之前,但我可以建议一个更简单的添加和删除记录的方法是通过 SQL

    Currentdb.execute "DELETE * FROM TheTable WHERE ContactId=" & contactId
    Me.from_subform.Form.Requery
    

    【讨论】:

    • 这种方法的问题是,当我尝试使用 dim contactID as long contactID=Me.to_subform.Form.RecordsetClone!contactIDto 子表单中的选定记录中获取联系人ID 时,我得到相同的No current record 错误。
    【解决方案2】:

    好的。

    在彻底搜索了所有与 3021 相关的内容后,我决定停止从记录集中删除项目。相反,我使用以下代码来删除当前选定的记录:

    Private Sub deleteBtn_Click()
    
    Dim db As dao.Database
    Dim rs As Recordset
    Dim id As Long
    
    'test for an empty subform
    Set rs = Me.to_subform.Form.RecordsetClone
    If rs.RecordCount = 0 Then
        Exit Sub
    End If
    
    
    'test for no record selected (i.e. cursor is on the new record line)
    If Not IsNull(Me.to_subform.Controls("id").Value) Then
    
        'get the ID value of the selected record
        id = Me.to_subform.Controls("id").Value
    
        'delete it from the source table
        Set db = CurrentDb
        db.Execute "delete * from toTable where id=" & id, dbFailOnError
    
        'refresh both forms
        Me.to_subform.Form.Requery
        Me.from_subform.Form.Requery
    Else
        MsgBox "No record selected."
    End If
    
    
    End Sub
    

    而且效果很好。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多