我开发了一个使用以下记录源的拆分表单:
SELECT * FROM [CCG Complaints];
表格效果很好,我对这方面没有任何问题。
用户有两个按钮:一个用于搜索,另一个用于显示所有记录。
在执行搜索后,关闭表单然后再次重新打开(在表单视图中)时出现问题:
但是,每当我在关闭表单之前单击Show all
,它就会在表单视图中成功打开,没有错误。
另一个特点是,在收到上面提到的错误后,我可以在设计视图中打开表单,然后可以在表单视图中查看它而不会显示错误消息 - 只有在表单中打开表单时才会出现错误在第一个实例中查看。
为什么这样做以及我该怎么做才能纠正它?
我用于按钮的代码在这里:
Private Sub search_Click()
Dim strSearch As String
Dim strText As String
If Len(Me.txtSearch.Value & vbNullString) = 0 Then
MsgBox ("Enter a search term.")
Else
strText = Me.txtSearch.Value
strSearch = "SELECT* from [CCG Complaints] where [Ref no] Like ""*" & strText & "*"" or [lastName] Like ""*" & strText & "*"" Or CCG Like ""*" & strText & "*"" "
Me.RecordSource = strSearch
End If
End Sub
Private Sub showAll_Click()
Dim strSearch As String
strSearch = "SELECT * from [CCG Complaints]"
Me.RecordSource = strSearch
End Sub
答案 0 :(得分:1)
不是更改记录源,而是将过滤器应用于现有记录。
Me.filter = "[Ref no] Like ""*" & strText & "*"" or [lastName] Like ""*" & strText & "*"" Or CCG Like ""*" & strText & "*"" "
Me.FilterOn = True
然后重置
Me.Filter = ""
Me.FilterOn = False
请注意,如果您的记录集稍微大一些,那么在许多字段上搜索这个通配符将变得非常低效。您可能希望查看更强大的搜索方法。这个http://allenbrowne.com/ser-62.html是一个更完整的解决方案。
答案 1 :(得分:0)
我建议将RecordSource设置为[CCG Complaints]
,而不是更改它。
而是使用.Filter
属性,这是实现表单过滤器的常用方法:
Private Sub search_Click()
Dim strSearch As String
Dim strText As String
If Len(Me.txtSearch.Value & vbNullString) = 0 Then
MsgBox ("Enter a search term.")
Else
strText = Me.txtSearch.Value
strSearch = "[Ref no] Like ""*" & strText & "*"" or [lastName] Like ""*" & strText & "*"" Or CCG Like ""*" & strText & "*"" "
Me.Filter = strSearch
Me.FilterOn = True
End If
End Sub
Private Sub showAll_Click()
Me.Filter = ""
Me.FilterOn = False
End Sub