[英]Access 2010 - Error Handling Filter Subform
如果过滤后没有记录,如何使用VBA禁用Datagridview的过滤器?
这是我的第一次尝试:
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
If Me.RecordsetClone.RecordCount = 0 Then
MsgBox ("Kein Datensatz gefunden. Filter wird entfernt.")
Me.Form.FilterOn = False
Me.Form.Requery
End If
End Sub
这是第二次尝试:
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Dim rs As DAO.Recordset
Set rs = Me.RecordsetClone
rs.Filter = Replace(Me.Filter, "[Tabelle1].", "")
Set rs = rs.OpenRecordset()
If rs.EOF Then
Cancel = True
End If
End Sub
在第二个代码中,我收到错误3061。第一个代码“有效”,但最终不需要。
因为:
我有3种表格。 主,子1和子2。
在MAIN中是Sub1,Sub2和单个TextBox。 该文本框称为“ psoudoID”。 Sub1是普通表格,用于显示不同记录集的详细信息,并位于MAIN的顶部。 Sub1下面是Sub2。 Sub2是一个Datagridview。 当用户单击Sub2上的记录集时,Sub2的ID进入psoudoID,然后从那里进入Sub1。 你明白?
现在的问题是,用户可以过滤Datagrid中的每一列以找到此处需要的记录集并显示上面的所有详细信息。 但是,当过滤后datagrid为空时,Sub2无法为psoudoID赋予ID,以此类推Sub1在MAIN中的显示时间不再更长。 屏幕在那个地方是空的。 通过单击网格中的“筛选器按钮”,Sub1再次出现在屏幕上。
我想通过单击MsgBox的“确定”或自动禁用筛选器,而不是单击gridview上的“筛选器按钮”来禁用筛选器。
希望您能理解我的看法。 对不起,我的英语不好:-)
谢谢。
素食
我相信您在使用过滤器Null
以及在实际应用过滤器之前使用Me.Filter时遇到问题。 同样,将对象重新分配给其属性/成员本身也给我带来了麻烦,因此,我尽量避免这样做。
以下应该工作:
Dim strOldFilter As String
Private Sub Form_ApplyFilter(Cancel As Integer, ApplyType As Integer)
Me.TimerInterval = 50
strOldFilter = Nz(Me.Filter, "")
End Sub
Private Sub Form_Timer
Me.TimerInterval = 0
If Me.Filter = strOldFilter Then Exit Sub
Dim rs As DAO.Recordset
Dim strFilter As String
strFilter = Nz(Me.Filter, "")
If strFilter = "" Then
'Handle this specific scenario
Exit Sub
End if
Set rs = Me.RecordsetClone
rs.Filter = Replace(strFilter, "[Tabelle1].", "")
Dim rsf as DAO.Recordset
Set rsf = rs.OpenRecordset
If rsf.EOF Then
Me.Filter = strOldFilter
End If
End Sub
请注意,如果将一个过滤器将导致0个记录的记录更改为另一个过滤器将导致0个记录的记录,则可能会导致无限循环每50毫秒重复一次(但是,如果该函数起作用,则您将无法使过滤器导致0个记录)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.