2012-08-08 41 views
0

我對如何做到這一點還沒有線索。我正在使用Access 2007,並使用VBA和SQL進行編碼。將虛擬孩子的過濾器與父表進行比較

表A有數據,帳戶和金額。用戶可以使用表單B訪問A中數據的子集,比方說所有行數在50到100美元之間的行。

當用戶查看某一行時,我需要知道是否有任何其他行使用同一個帳戶排除在他們的視圖之外。換句話說,我需要知道在父項中是否有可見的行在子項中不可見。

我認爲一個解決方案是確定哪些過濾器在其視圖中處於活動狀態,然後我可以使用dcount進行比較。儘管如此,我不知道如何獲得他們認爲活躍的過濾器。而且可能有一個更簡單的方法 - 我在這裏超出了我的深度。

回答

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 

以上是未經檢驗的,並且因爲它的立場,因爲創建一個新的查詢將只運行一次,如果它運行在所有的,而不是編輯現有的查詢。

+0

感謝Remou。我最終走向另一個方向(只是讓按鈕始終可見,並讓用戶決定是否想看更多),但這是有道理的,如果我需要在另一個點上做這個,現在我有一個跳躍點。 – graidan 2012-08-09 17:59:39