我使用 Access2010项目作为前端,将 MS SQL Server 2008 称为后端。在我的Access项目中,有frmKlientenÜbersicht
形式。此表单的视图abfKlientenÜbersicht
为dataSource。
现在,我正在尝试使用此代码获取当前显示在我表单中的记录数:
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]
设置到文本框(请参阅新图片)并在VBA代码中尝试DCount("*", "abfKlientenÜbersicht", me.Filter)
。
不幸的是,当将 filterClause用作DCount的参数值时,似乎 filterClause无效。 (见filter for filterClause)。
正如您所看到的,count(..)
不会产生正确的数字 - 而且filterClause(由访问!! 生成)似乎无效,无法由DCount(..)
使用
如果有人想自己尝试,只需创建一个ADP,添加一个表单,添加一个视图,表单dataSource是一个视图,设置一个过滤器,并尝试获取记录数量?!!
期待任何评论/答案/提示!
答案 0 :(得分:1)
使用VBA,DCount
将为您提供所需内容
DCount("*", "MyTable", Me.Filter)
如果您想将其放在表单上,可以使用更简单的方法。使用未绑定的框,并将其设置为=count([FieldName])
此计数应保持正确,无论是否计算过滤记录。
答案 1 :(得分: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]))
(删除行中的断点,它是装饰性的)