首页 > 解决方案 > 查询不隔离记录

问题描述

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

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

    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

我期望的结果是,例如,我寻找一种材料“水泥”,我得到了三四个水泥供应商的几条记录。我为一个特定的供应商运行第二个查询,但我得到了该供应商的所有交易,而不仅仅是该供应商的“水泥”交易。例如,我期待的是,如果我选择一个供应商说(“CitiHardware”),我会看到“CitiHardware”中的所有项目,好的。现在我选择一个我想从“CitiHardware”中分离出来的材料说(“工具”) “。我得到的是我购买的所有供应商,包括 CitiHardware 的“工具”。如果我再次过滤“CitiHardware”,我会得到所有购买。来自 CitiHardware 的“工具”与其他记录并不隔离。

标签: vbams-access

解决方案


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

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

...
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"

推荐阅读