希望你在周五下午过得愉快!
我在MS Access上有一个表单,它在链接表中搜索条形码(由用户输入) 如果条形码存在于表格中,我想向用户显示包含匹配条形码的记录,如果不是,则代码在其他地方移动。
这是我到目前为止所做的:
DoCmd.DeleteObject acQuery, "Query2"
Set qdef = CurrentDb.CreateQueryDef("Query2", s)
Me.sbfMatchedRec.SourceObject = "Query2"
尝试将SourceObject更改为Query2时出错 如果我打开Query2,它就会有我需要的确切信息。我也可以通过表单属性并将SourceObject更改为Query2,然后显示我需要的内容,但我只需要知道如何在VBA中更改它,如上所述。
谢谢!
答案 0 :(得分:1)
您可以使用从表单文本框中传入的条形码重新查询子表单,作为子表单WHERE
属性中的.RecordSource
条件。
例如,假设此表( tblProducts )包含条形码记录列表:
然后,您可以在表单中添加一个子表单,该表单将显示来自 tblProducts 的记录。还要在表单中添加一个文本框,供用户提供条形码和命令按钮,供用户启动搜索:
在使用VBA连接搜索按钮之前,请查看子窗体的.RecordSource
属性...
...将查询构建器切换到SQL视图:
复制sql,因为您可以使用它作为使用VBA过滤子表单中记录的基础。
返回设计视图中的表单,然后进入搜索按钮的On Click事件:
然后,您复制的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
放在表单上的文本框中,然后单击搜索按钮,则子菜单仅显示匹配的记录: