2017-08-11 43 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 
相关问题