2017-08-11 49 views
0

我通過循環瀏覽頁面上的所有控件來篩選子表單,以創建所述子表單的記錄源。當控件匹配字段名稱時它很好,然後如果我不能使用匹配的控件名稱,它會爲該控件名稱增加一點特定的VBA,但是我很滿意,但是當我嘗試使用多個控件時它會變得非常長在一個領域工作,因爲我需要包括每一個可能的組合,我想知道是否有像通過相關控制循環更簡單的方法。更簡單的方式來循環控制來創建SQL字符串?

我的意思是如果我想篩選,但允許他們一次選擇多達4人,所以控制Assigned_to_1,2,3,4所有在那裏建立在該領域的地方條件它工作精細覆蓋每一個進來如果它的連鎖很長,很難去改變或添加有人知道一種方式,我可能會簡化這一點?

的,其中目前正在建設的格式的我,即時通訊 -

 (Assigned_to = Assigned_to ='" & Assigned_to & "' Or Assigned_to ='" & Assigned_to_2& "') 

顯然它只包括那些在字符串的建設的一個輸入控件。也許沿着循環的路線,通過使用通配符來建立一個強大的添加到主字符串的控件?

回答

2

A Tag控制屬性對於這樣的任務非常有用。你可以在這裏放置列名。如果你需要更多的參數,你可以使用像「key1 = value1 | key2 = value2」這樣的字符串,並在控制循環中分析它們。

+0

沒有想到使用標籤作爲常見的我認爲ive構建解決方案生病只是測試它,張貼爲答案 – user681413

0

解決方案找到了,下面是工作過濾器代碼應該別人找到它的價值。

Dim strFilter As String 
Dim ctL As Access.Control 
Dim StrSQL As String 
Dim StrASS As String 
For Each ctL In Me.Controls 

If Not IsNull(ctL) And ctL.Tag <> "" Then 
    If (ctL.Tag = "Assigned_Officer") Then 
     If StrASS = "" Then 
     StrASS = "AND (Assigned_Officer = '" & ctL & "'" 
     Else 
     StrASS = StrASS & " Or Assigned_Officer = '" & ctL & "'" 
     End If 
    Else 
    strFilter = strFilter & " AND " & ctL.Name & " = " 
     If ctL.Tag = "text" Then 
     strFilter = strFilter & "'" & ctL & "'" 
     Else 
     strFilter = strFilter & ctL 
     End If 
    End If 
    End If 
Next 
    If Not StrASS = "" Then 
    StrASS = StrASS & ")" 
    strFilter = strFilter & StrASS 
    End If 
StrSQL = "<Select statement with a fixed where on it>" & Strfilter 
Me.<subform>.Form.RecordSource = StrSQL 
end Sub 
相關問題