将虚拟孩子的过滤器与父表进行比较

时间:2012-08-08 22:45:22

标签: sql vba ms-access parent-child

我对如何做到这一点一无所知。我正在使用Access 2007,并使用VBA和SQL进行编码。

表A包含数据,帐户和金额。用户可以使用表单B来访问A中数据的子集,例如,所有行的金额在$ 50和$ 100之间。

当用户查看某行时,我需要知道是否有任何其他行具有从其视图中排除的相同帐户。换句话说,我需要知道在父级中是否有可见的行在子级中不可见。

我认为解决方案是确定哪些过滤器在其视图中处于活动状态,然后我可以使用dcount进行比较。不过,我不知道如何获得他们视图中活跃的过滤器。并且可能有一种更简单的方法 - 我在这里超出了我的深度。

1 个答案:

答案 0 :(得分:1)

我们假设TableA具有主键ID。使用FormB的当前事件:

 Dim rs AS DAO.Recordset

 dAmt = Me.Amount
 sAcc = Me.Account 

 ''Get a list of visible IDs
 With Me.RecordsetClone
    .MoveFirst

     Do While Not .EOF
         If !Amount=dAmt And !Account=sAcc Then
            sIDs = sIDs & "," & .ID
         End If
         .MoveNext
     Loop
 End with

 ''Other IDs
 sSQL = "SELECT * FROM TableA "
      & "WHERE Amount = " & dAmt _
      & "Account = '" & sAcc _
      & "' ID Not In (" & Mid(sIDs,2) & ")"

 CurrentDB.CreateQueryDef("NewQ",sSQL")
 Docmd.OpenQuery NewQ

以上是未经测试的,如果它完全运行,它将只运行一次,因为创建了一个新查询,而不是正在编辑的现有查询。