我打开一个带过滤器的表单。当我使用此表单创建新记录时,我希望字段获得与过滤器相同的默认值。 (这样新记录将成为当前过滤结果的一部分)。 当我打开表单时,我将过滤器值保存在tempvar中。
我怎样才能以简单的方式实现这一目标?
我尝试了后两种方法来从这个问题中获取当前过滤器:Access 2003 VBA Get Active filter?
我不理解前者。
我之前没有编写Visual Basic,也没有使用Access任何重要程度。所以我可能需要一个非常详细的解释。
非常感谢
答案 0 :(得分:0)
不幸的是,Access没有该功能。而且你必须学习VBA来实现它。
我认为分析过滤器会很困难。在我看来,为每个字段设置过滤器和默认值会更容易。需要实现函数来打开表单和一些公共表单方法来设置值。
打开表单的功能如下:
Dim frm as Form_SomeForm
DoCmd.OpenForm "SomeForm", , , , , acHiden
Set frm = Forms("SomeForm")
frm.SetControlFilter("UserName", "=", "Foo")
frm.SetControlFilter("Age", "=", "123")
...
frm.ApplyFilter()
frm.Visible = True
表单模块“SomeForm”可能如下所示:
Dim m_stFiler as String
Public Sub SetControlFilter(ByVal stCtrl As String, ByVal stExp As String, ByVal stValue as String)
Dim ctl As Control
'-- set default value
set ctl = Me("stCtrl")
ctl.DefaultValue = "=""" & stValue & """"
'-- build filter
If m_stFiler <> "" Then m_stFiler = m_stFiler & " AND "
m_stFiler = m_stFiler & ctl.ControlSource & " " & stExp & " "" & stValue & "" "
End Sub
Public Sub ApplyFilter()
Me.Filter = m_stFiler
Me.FilterOn = True
End Sub
答案 1 :(得分:0)
Sergeys答案让我走上正轨。
我不得不做一些调整。
它只适用于一个Field,我不得不称之为方法:
Call frm.SetControlFilter("Age", "=", "123")
出于某种原因,我还必须将stCtrl保存在新的内部变量中:
Dim stCon As String
stCon = stCtrl
'-- set default value
Set ctl = Me(stCon)
非常感谢
答案 2 :(得分:0)
我觉得这个问题是关于从表单中打开记录以查看过滤了所选主记录的子表单的。这样,当您随后在子表单中添加更多记录时,就可以将主记录ID继承到每个子表单中。
如果是这样,有一种更简单的方法可以实现:
1)创建一个子表单“ MyChildForm”,其中行源与主表单相同,这就像是一种用于存储主ID的虚拟表单。
2)在“ MyChildForm”中,使用您要编辑的子数据创建一个子表单
3)使用链接主/子字段属性链接“ MyChildForm”表单及其子表单,方法是先选择子表单的边界框,然后依次选择属性和“数据”选项卡。
4)在主表单上创建一个按钮以打开子表单
DoCmd.OpenForm "MyChildForm", acNormal, , "[ID] = " & Me.ID
就是这样...
很抱歉,如果那不是您想要的,并且您实际上是出于其他原因想要通过过滤器。