如何在表格Access 2016中显示记录 - VBA

时间:2016-03-18 11:51:12

标签: vba ms-access access-vba

希望你在周五下午过得愉快!

我在MS Access上有一个表单,它在链接表中搜索条形码(由用户输入) 如果条形码存在于表格中,我想向用户显示包含匹配条形码的记录,如果不是,则代码在其他地方移动。

这是我到目前为止所做的:

    DoCmd.DeleteObject acQuery, "Query2"

    Set qdef = CurrentDb.CreateQueryDef("Query2", s)

    Me.sbfMatchedRec.SourceObject = "Query2"

尝试将SourceObject更改为Query2时出错 如果我打开Query2,它就会有我需要的确切信息。我也可以通过表单属性并将SourceObject更改为Query2,然后显示我需要的内容,但我只需要知道如何在VBA中更改它,如上所述。

谢谢!

1 个答案:

答案 0 :(得分:1)

您可以使用从表单文本框中传入的条形码重新查询子表单,作为子表单WHERE属性中的.RecordSource条件。

例如,假设此表( tblProducts )包含条形码记录列表:

enter image description here

然后,您可以在表单中添加一个子表单,该表单将显示来自 tblProducts 的记录。还要在表单中添加一个文本框,供用户提供条形码和命令按钮,供用户启动搜索:

enter image description here

在使用VBA连接搜索按钮之前,请查看子窗体的.RecordSource属性...

enter image description here

...将查询构建器切换到SQL视图:

enter image description here

复制sql,因为您可以使用它作为使用VBA过滤子表单中记录的基础。

返回设计视图中的表单,然后进入搜索按钮的On Click事件:

enter image description here

然后,您复制的SQL可用于创建一个SQL字符串,该字符串采用表单条形码文本框中输入的值(我称之为表单上的文本框 txtBarcode )作为WHERE子句的一部分。然后可以将此sql字符串应用于子表单的.RecordSource属性,然后可以重新获取子表单以在子表单中显示新SQL定义的结果集:

Private Sub cmdSearch_Click()

    Dim strSql As String

    strSql = "SELECT tblProducts.Barcode, tblProducts.ProductName" _
           & " FROM tblProducts"

    If _
        Me.txtBarcode > "" _
    Then
        strSql = strSql & " WHERE tblProducts.Barcode=" & Me.txtBarcode
    End If

    Me.tblProducts_sub.Form.RecordSource = strSql
    Me.tblProducts_sub.Form.Requery

End Sub

因此,如果我们将1001放在表单上的文本框中,然后单击搜索按钮,则子菜单仅显示匹配的记录:

enter image description here