0

我打开一个带有过滤器的表格。当我使用此表单创建新记录时,我希望字段获得与过滤器相同的默认值。(这样新记录将成为当前过滤结果的一部分)。当我打开表单时,我将过滤器值保存在 tempvar 中。

我怎样才能以简单的方式实现这一目标?

我已经尝试了后两种方法从这个问题中获取当前过滤器:Access 2003 VBA Get Active filter?

我不明白前者。

我以前没有编程过 Visual Basic,也没有使用过任何重要程度的 Access。所以我可能需要一个非常详细的解释。

非常感谢

4

3 回答 3

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
于 2013-07-05T18:33:42.527 回答
0

谢尔盖的回答让我走上了正轨。

我不得不做一些 tweeks。

它只适用于一个领域,我不得不这样调用方法:

Call frm.SetControlFilter("Age", "=", "123")

出于某种原因,我还必须将 stCtrl 保存在一个新的内部变量中,如下所示:

Dim stCon As String
stCon = stCtrl
'-- set default value
Set ctl = Me(stCon)

多谢

于 2013-07-08T09:31:10.680 回答
0

我有一种感觉,这个问题是关于从表单打开记录以查看过滤了所选主记录的子表单。因此,当您向子表单添加更多记录时,您会将主记录 ID 继承到每个子表单中。

如果是这种情况,有一种更简单的方法可以做到这一点:

1)创建一个子表单“MyChildForm”,其中行源与主表单相同,这就像一种假人,用于存放主ID。

2)在“MyChildForm”中,创建一个包含要编辑的子数据的子表单

3)使用链接主/子字段属性将“MyChildForm”表单与其子表单链接,通过选择子表单的边界框,然后是属性,然后是数据选项卡来找到。

4)在您的主表单上创建一个按钮以打开子表单

DoCmd.OpenForm "MyChildForm", acNormal, , "[ID] = " & Me.ID

就是这样……

抱歉,如果这不是您想要的,并且您实际上出于其他原因想要通过过滤器。

于 2018-10-25T10:03:23.943 回答