使用VBA进行多组合框搜索

时间:2017-11-09 18:40:22

标签: vba forms ms-access combobox

我目前的搜索问题无法正常运行。这个想法是让用户点击不同的字段并将它们分配给文本框然后进行搜索。 Image以上是UI当前在表单中的样子,代码附在下面。例如,当我选择firstName作为字段1而Title作为字段2时,在字段1中输入文本“joe” 和“学生”进入相应的文本框然后点击搜索,它显示所有学生成绩而不是表格中的那一行数据。我认为这可能是组合框未被同步的问题,让我们说如果cbo1和cbo2声明字段,那么这些重复文本字段将被过滤。 cboField,cboField2和cboField3都是组合框,command_21是搜索按钮,command_28是显示所有记录。我对此仍然很新,并不完全确定。任何帮助表示赞赏。提前致谢

Option Compare Database

Private Sub cboField_Enter()
Dim oRS As DAO.Recordset, i As Integer
    If Me.Form.FilterOn = True Then DoCmd.ShowAllRecords
Set oRS = Me.RecordsetClone
cboField.RowSourceType = "Value List"
cboField.RowSource = ""
    For i = 0 To oRS.Fields.Count - 1
    If oRS.Fields(i).Type = dbText Then cboField.AddItem oRS.Fields(i).Name
    Next i
 End Sub

Private Sub cboField2_Enter()
Dim rs As DAO.Recordset, i As Integer
    If Me.Form.FilterOn = True Then DoCmd.ShowAllRecords
Set rs = Me.RecordsetClone
cboField2.RowSourceType = "Value List"
cboField2.RowSource = ""
    For i = 0 To rs.Fields.Count - 1
    If rs.Fields(i).Type = dbText Then cboField2.AddItem rs.Fields(i).Name
    Next i
End Sub

Private Sub cboField3_Enter()
Dim rs As DAO.Recordset, i As Integer
    If Me.Form.FilterOn = True Then DoCmd.ShowAllRecords
Set rs = Me.RecordsetClone
cboField2.RowSourceType = "Value List"
cboField2.RowSource = ""
    For i = 0 To rs.Fields.Count - 1
    If rs.Fields(i).Type = dbText Then cboField2.AddItem rs.Fields(i).Name
    Next i

End Sub

Private Sub Command21_Click()
Dim sfilter As String, oRS As DAO.Recordset
Dim sfilter2 As String, rs As DAO.Recordset

If IsNull(cboField) And IsNull(cboField2) And IsNull(cboField3) Then
DoCmd.ShowAllRecords
MsgBox "select a field"
Exit Sub
End If

If Not IsNull(cboField) Then
sfilter = cboField & " LIKE '" & txtBox & "*'"
DoCmd.ApplyFilter , sfilter
End If

If Not IsNull(cboField2) Then
sfilter2 = cboField2 & " LIKE '" & txtBox2 & "*'"
DoCmd.ApplyFilter , sfilter2
End If

If Not IsNull(cboField3) Then
sfilter3 = cboField3 & " LIKE '" & txtBox3 & "*'"
DoCmd.ApplyFilter , sfilter3
End If




Set oRS = Me.RecordsetClone
Set rs = Me.RecordsetClone

If oRS.RecordCount And rs.RecordCount = 0 Then
MsgBox " no record matches"
DoCmd.ShowAllRecords
End If


End Sub

Private Sub Command28_Click()
DoCmd.ShowAllRecords
End Sub

0 个答案:

没有答案