搜索后未找到访问表单记录源

Posted

技术标签:

【中文标题】搜索后未找到访问表单记录源【英文标题】:Access form record source not found after search 【发布时间】:2016-11-03 13:29:12 【问题描述】:

我开发了一个拆分表单,它使用以下记录源:

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

【问题讨论】:

1.您是否有理由不使用[CCG Complaints] 作为记录源? -- 2.如何过滤(请添加代码)? -- 3.如果表单属性FilterOnLoad为True,尝试设置为False。 1.是的 - 原因是因为我已经尝试过了,但错误仍然存​​在。 2.问题添加代码。 3.设置为No,所以我设置为Yes,但是还是报错。 (我已将其设置回No。) 【参考方案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 是一个更完整的解决方案。

【讨论】:

感谢您的推荐 - 这更像是我想要实现的目标。 使用本网站详述的方式,有没有办法在同一个表格内更改记录源?【参考方案2】:

我建议将 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

【讨论】:

做到了 - 谢谢!为什么第一种情况会出现错误? 我真的不知道 - 我不得不尝试在这里重现它,而且真的没有时间。 @斯诺克球迷

以上是关于搜索后未找到访问表单记录源的主要内容,如果未能解决你的问题,请参考以下文章

访问以单一形式搜索所有记录

未找到源,但无法搜索部分或全部事件日志。无法访问的日志:安全 [重复]

访问表单,从另一个表中搜索记录并插入当前表单中的字段

访问后未定义的变量/空属性错误

访问表单不显示添加新记录(空记录) - Recordsource 是一个视图

从子窗体访问去记录