【问题标题】:Access RecordSet is empty访问记录集为空
【发布时间】:2021-05-05 15:01:39
【问题描述】:

我得到了一个非常简单的 Sub,它由 Access Form 中的 Combobox 运行。组合框显示 Products 表中某一列的所有值。基于该选择,其他值应用于填充此表单中的文本框。 所以基本数据求案例。

Private Sub ComboProductNameSearch_AfterUpdate()

    Dim rs As Object
    Dim strSearchCriteria As String
    Dim strSearchName As String

    Set rs = Me.Recordset.Clone
strSearchName = Me!ComboProductNameSearch.Value
strSearchCriteria = "Product name like '" & strSearchName & "'"

MsgBox (Me.Recordset.RecordCount)



rs.FindFirst strSearchCriteria
       If rs.NoMatch Then
           MsgBox "Record not found"
        Else
           Me.Bookmark = rs.Bookmark
           MsgBox "Record is found"
        End If

用户现在将选择一个产品,结果是 Recordset 为空。因此,代码总是运行到 Record not found 。 如何访问正确的记录集? 我的表单将使用查询从该表中查找所有数据。查询有效。 没有链接到任何其他表或查询。

Watch : : strSearchCriteria : "Product name like 'Vehicle, person car'" : String : Form_frmAddProduct.ComboProductNameSearch_AfterUpdate

Watch : + : ComboProductNameSearch : "Vehicle, person car" : Object/ComboBox : Form_frmAddProduct.ComboProductNameSearch_AfterUpdate

Watch : : strSearchName : "Vehicle, person car" : String : Form_frmAddProduct.ComboProductNameSearch_AfterUpdate

【问题讨论】:

    标签: vba recordset


    【解决方案1】:

    尝试:

    strSearchCriteria = "[Product name] = '" & strSearchName & "'"
    

    或者,如果字段名称是产品

    strSearchCriteria = "Product = '" & strSearchName & "'"
    

    此外,通常使用 RecordsetClone

    Dim rs As DAO.Recordset
    Dim strSearchCriteria As String
    Dim strSearchName As String
    
    Set rs = Me.RecordsetClone
    

    如果表单显示记录,RecordsetClone 也会显示。

    【讨论】:

    • 您好 Gustav,感谢您的支持。我没有尝试任何帮助,因为 RecordSet 是空的。 MsgBox (Me.Recordset.RecordCount) 给出 0。没有可搜索的内容。我今天一直在想这个,但我仍然不明白。怎么了,如何让 RecordSet 被填满?!
    • 确保表单有一些记录。如果不是,则其 Recordset 为空。
    • 有趣,表单有记录是什么意思?它有空的文本框,在表单属性中,我将记录源设置为指向这个特定的表。我的comboxos 正确显示了 Products-table 中的所有产品。记录集类型是默认动态集。因为可以按原样保留整个表,但不接受以某种方式将 Recordset 设置为指向表,这是错误(需要对象):Set rs = db.OpenRecordset(“Products”)
    • 尝试使用RecordsetClone。请查看扩展答案。
    • 马上就奏效了。非常感谢您指出这一点。
    【解决方案2】:

    Property Sheet of the Form

    在我的表单中,RecordSource 是同一张表。

    Private Sub ComboProductNameSearch_AfterUpdate()
    
        Dim rs As DAO.Recordset
    
        'Set rs = Me.Recordset.Clone
        Set rs = Me.RecordsetClone
        
    
       If rs.EOF Then
          MsgBox ("EOF no records")
       Else
          rs.MoveLast
          MsgBox ("Records found")
          rs.MoveFirst
       End If
    
    MsgBox (Me.Recordset.RecordCount)
    

    仍然没有火没有烟 EOF 和 0 条记录。

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 2020-11-04
      • 2013-02-04
      • 1970-01-01
      • 1970-01-01
      • 2012-05-25
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多