0

我使用Access2010 项目作为前端,将MS SQL Server 2008称为后端。在我的 Access 项目中有 form frmKlientenÜbersicht。这个表单有一个abfKlientenÜbersicht作为数据源的视图。

现在我正在尝试使用以下代码获取当前显示在我的表单中的记录数:

Private Sub Form_Current()
    Debug.Print "Form_Current: " & anzahlDatensätze
    lblAnzahlDatensätze.Caption = anzahlDatensätze & " Klient(en)"
End Sub

Private Function anzahlDatensätze() As Integer
    Dim rs As Recordset
    Set rs = Me.RecordsetClone
    rs.MoveLast
    anzahlDatensätze = rs.RecordCount
End Function

这工作正常,直到我使用一些过滤器。如果我在表单上使用任何过滤器,记录数保持不变

  • 我必须更改什么才能显示当前的记录数(如果过滤或不过滤)?
  • 我的代码没有显示正确的记录数的原因是什么?

访问项目概述

编辑:根据给定的评论和答案,我尝试设置Count([pkKlient]到文本框(见新图片)并DCount("*", "abfKlientenÜbersicht", me.Filter)从 VBA 代码中尝试。

不幸的是,filterClause在用作 DCount 的参数值时似乎无效。(有关 filterClause 的图片,请参见图片)。

如您所见count(..),不会产生正确的数字-并且 filterClause (由访问生成!!)似乎对以下用户无效DCount(..)

如果有人想试试,自己一个人,只需要创建一个ADP,添加一个表单,添加一个视图,表单数据源是一个视图,设置一个过滤器,然后尝试获取记录数?!!

期待任何评论/答案/提示!

过滤时的表单截图

4

2 回答 2

1

使用 VBA,DCount将为您提供所需的

DCount("*", "MyTable", Me.Filter)

如果你想把它放在表格上,有一个更简单的方法。使用未绑定的框,并将其设置为=count([FieldName])

在表单属性中使用 Count

这个计数应该保持正确,无论它是否计算过滤记录。

于 2013-01-29T20:20:11.030 回答
0

一些笔记,有十多件事可能会出错,甚至不能称之为测试。但是,它为我返回了正确的计数。

显然,表单过滤器只是隐藏记录,而这将应用一个真正的过滤器。但是,您需要将格式转换为有效过滤器的正确形状。最后,WHERE 语句可能会更容易。

Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)

    With Me.Recordset
        ''Filter
        If ApplyType = 1 Then
            ''Very, very roughly. Remove form name, use single quotes
            ''You will need a lot more code for safety
            sfilter = Replace(Me.Filter, "[" & Me.Name & "].", "")
            sfilter = Replace(sfilter, """", "'")

            .Filter = sfilter 

            MsgBox "Recordset : " & Me.Recordset.RecordCount & vbCrLf _
            & "Filtered : " & .RecordCount

        Else
            ''Remove filter - ApplyType 0
            .Filter = ""
        End If

    End With

End Sub

带有类似警告的附加说明

您还可以在这些行上设置一个文本框:

=IIf([FilterOn]=True,DCount("id","ATable",
 Replace(Replace([Filter],"[" & [Name] & "].",""),"""","'")),Count([id]))

(删除行中的中断,它是装饰性的)

于 2013-01-30T00:05:53.590 回答