查询不隔离记录

时间:2019-05-14 04:49:37

标签: access-vba access

我有一个运行两个不同查询的表单。结果包括记录,这些记录在运行第二个查询时无法隔离(向下钻取)第一个查询的记录。

我尝试设置几个不同的查询以隔离记录,包括尝试合并查询,以期消除对已过滤掉的记录的撤回。

    Private Sub cmdSearchMaterial_Click()

            Dim task2 As String



             task2 = "select * from TblPurchases order by [Material] "

    Me.Filter = "[Material]= '" & Me.CboMaterial & "'"
    Me.TxtTotal = Format(DCount("Material", "QueryMaterials"), "0")
    Me.RecordSource = ("QueryMaterials")



    End Sub
    'Second query
    Private Sub CmdSearchVendors_Click()

        Dim task As String

        task = "select * from TblPurchases order by [vendors] "

    Me.Filter = "[Vendor]= '" & Me.cbovendors & "'"
    Me.TxtTotal = Format(DCount("vendor", "Purchases Query"), "0")
    Me.RecordSource = ("Purchases Query")


    End Sub

我期望的结果是,例如,我寻找一种材料“水泥”,我与3或4个水泥供应商取得了几条记录。我针对一个特定的供应商运行第二个查询,但是我得到了该供应商的所有交易,而不仅仅是该供应商的“水泥”交易。我期望例如,如果我选择供应商的say(“ CitiHardware”),我会看到“ CitiHardware”中的所有项目,好的。 现在,我选择一个要从“ CitiHardware”中分离出来的材料(“工具”)。我得到的就是我从包括CitiHardware在内购买了“工具”的所有供应商。如果我再次过滤“ CitiHardware”,我将获得所有购买的商品。CitiHardware的“ Tools”不会与其他记录分离。

1 个答案:

答案 0 :(得分:0)

您的代码中有一些错误。首先,您只过滤表单而不是实际查询。过滤表单后,将记录源再次设置为查询本身(不使用过滤器)。

有几种方法可以实现您想要的,这取决于您的方案。例如,您可以根据您的组合框选择每次创建记录源。

...
Me.RecordSource = task & " WHERE " & Me.Filter

End Sub

或者您通过查询更改sql:

Dim qdef as QueryDef
Set qdef = CurrentDb.QueryDefs("YourQueryName")
qdef.SQL = "SELECT * FROM TblPurchases WHERE Material = 'MaterialString'"  
Me.Recordsource = "YourQueryName"