[英]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.