【问题标题】:How to get the CURRENT filter string of a (sub-) form, filtered manually at runtime如何获取(子)表单的当前过滤器字符串,在运行时手动过滤
【发布时间】:2018-01-14 01:10:24
【问题描述】:

我正在尝试仅更新用户在表单中过滤的表中的行。 直接使用当前应用于表单的过滤器(me.filter)似乎很聪明。不幸的是,它没有立即更新。我需要将表单切换到编辑并返回到表单视图才能获得 me.filter 的真正价值。

详情:使用Access 2013,表单是子表单

如何根据当前和手动设置的条件更新 me.Filter 的值?

或者重新表述问题:如何获得(子)表单的 CURRENT 过滤字符串?

Public Sub SetSelect()
    Dim strSQL As String
    Dim temp As Variant

    'unsuccessful tries to update me.filter
    temp = Me.FilterOn
    Me.FilterOn = False
    Me.FilterOn = temp
    Me.Parent.Requery
    Debug.Print Me.Filter
    '--- actual code

    If Me.FilterOn Then
        strSQL = "UPDATE Bauteile SET Auswahl = true WHERE " & Me.Filter & ";"
        DoCmd.RunSQL strSQL
        strSQL = "UPDATE Bauteile SET Auswahl = false WHERE not(" & Me.Filter & ");"
        DoCmd.RunSQL strSQL
    Else
        DoCmd.RunSQL "UPDATE Bauteile set Auswahl= true"
    End If

End Sub

更新: 我在网上找到了上面的代码sn-p。 http://www.supportnet.de/t/2219076 显然它在 2009 年有效。会是 Access 2013 的问题吗?

【问题讨论】:

    标签: ms-access vba


    【解决方案1】:

    您没有“更新”过滤器,而是设置了它。所以还不太清楚你要做什么。

    也许是这样的:

    Public Sub SetSelect()
    
        Dim strSQL As String
    
        If Me.FilterOn Then
            strSQL = "UPDATE Bauteile SET Auswahl = (" & Me.Filter & ");"
        Else
            strSQL = "UPDATE Bauteile SET Auswahl = True;"
        End If
        DoCmd.RunSQL strSQL
    
        Me.Parent.Requery
    
    End Sub
    

    【讨论】:

    • Me.filter 未知,用户按任意标准过滤表单。我想得到这个手动操作的过滤字符串。这意味着获取整个表的子集,然后对子集应用更新查询。离开“表单视图”后,此字符串的值将存储在 me.filter 中。
    • 代码应该与此类似,但我不知道您所说的“离开表单视图”是什么意思。
    • “离开表单视图”是指关闭表单,或者将其设置为“设计模式”。只有当我这样做时,表单的过滤器属性才会更新。我也认为代码应该可以工作,唉......
    • 我可以随意更改问题的标题。
    猜你喜欢
    • 1970-01-01
    • 2016-12-18
    • 2014-07-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-08
    • 2013-09-24
    • 1970-01-01
    相关资源
    最近更新 更多