在表单上构建搜索过滤器以查找记录

时间:2015-09-25 03:31:56

标签: database ms-access search filter access-vba

我有一个TimeCardSplit表单,它是一个拆分表单。我希望能够在其记录源EmployeeWorkLog中搜索基于特定字段的记录,以填充表单进行更正。

我有两个组合框,一个文本框和一个列表框,我想用来过滤我的结果。他们是cboSearchEmployee,cboSearchJob,tboSearchDate和lstSearch。我想让lstSearch显示EmployeeWorkLog中的所有记录,并能够使用cboSearchEmployee,cboSearchJob和tboSearchDate过滤掉它。一旦记录被过滤下来,我希望能够在lstSearch中双击它们并以TimeCardSplit的形式将它们显示出来。

我感谢任何可以给出的建议。

谢谢你的期待。

我做了更多搜索,并决定转到子表单而不是使用splitform。我发现我可以使用以下代码过滤子表单。

Private Sub cboSearchJob_AfterUpdate()
 If IsNull(Me.cboSearchJob) Then
    Me.cldTimeCard.Form.Filter = ""
    Me.cldTimeCard.Form.FilterOn = False
Else
    Me.cldTimeCard.Form.Filter = "[JobID]=" & Me.cboSearchJob
    Me.cldTimeCard.Form.FilterOn = True
End If
 Exit Sub
  End Sub

现在我试图找到一个功能,一旦过滤后双击一行就可以将其带入表单。目前我正在使用......

Private Sub cboJob_DblClick(Cancel As Integer)
    DoCmd.OpenForm "Try", , , "[JobID] = " & Me!JobID
End Sub

这当然只在我子表单中的一个组合框中。虽然这样做但它只会将我的过滤结果的第一个实例带入表单,而不是我双击的特定行。

所以这是我的新问题。是否有更好的地方可以将此代码或类似代码填充到表单中,并且我会双击一行?

再次感谢您的期待。

1 个答案:

答案 0 :(得分:0)

这是我找到的解决方案,效果很好。我在6月7日here之前获得了解决方案。我非常感谢你的帮助。

enter Private Sub cmdFilter_Click()
Dim strWhere As String
Dim lngLen As Long
Const conJetDate = "\#mm\/dd\/yy\#"   

 If Not IsNull(Me.cboSearchJob) Then
    strWhere = strWhere & "([JobID] = " & Me.cboSearchJob & ") AND "
End If

If Not IsNull(Me.cboSearchEmployee) Then
    strWhere = strWhere & "([EmployeeID] = " & Me.cboSearchEmployee & ") AND "
End If

If Not IsNull(Me.cboSearchService) Then
    strWhere = strWhere & "([ServiceID] = " & Me.cboSearchService & ") AND "
End If

If Not IsNull(Me.tboStartDate) Then
    strWhere = strWhere & "([DateWorked] >= " & Format(Me.tboStartDate, conJetDate) & ") AND "
End If
If Not IsNull(Me.tboEndDate) Then   
    strWhere = strWhere & "([DateWorked] < " & Format(Me.tboEndDate + 1, conJetDate) & ") AND "
End If
lngLen = Len(strWhere) - 5
If lngLen <= 0 Then     
    MsgBox "No criteria", vbInformation, "Nothing to do."
Else                    
    strWhere = Left$(strWhere, lngLen)  

    Me.cldTimeCard.Form.Filter = strWhere
    Me.cldTimeCard.Form.FilterOn = True
End If

此处结束子代码

感谢大家一起来看看并帮助我完成这项任务。现在进入下一个......