1

我在 Microsoft Access 2007 中有一个列表表单,我正在尝试制作一个按钮,该按钮将在其中一个字段中搜索给定的短语。问题是我要搜索的字段是备注字段,我通常希望保持记录排序(按计数字段)。这会将我的备注字段截断为 255 个字符,并使该字段的其余部分无法搜索。因此,在搜索表单的 Form_Open 事件期间,我一直在关闭我正在搜索的表单的“OrderByOn”属性(或将“OrderBy”设置为“”),这似乎正确地取消了我的数据排序并使备忘录字段完全可见。但是,当我尝试搜索时,有时会在到达 FindNext 行时收到错误“Microsoft Visual Basic 运行时错误'1006':未知”。如果在当前记录和记录集末尾之间的记录的前 255 个字符中找不到搜索词,我想我会收到错误消息。这是搜索表单的代码:

    Private Sub Form_Open(Cancel As Integer)
        [Forms]![MyForm]![MySubform].[Form].OrderBy = ""
        '[Forms]![MyForm]![MySubform].[Form].OrderByOn = False
    End Sub

    Private Sub Search_Click()
        Dim vDescription As String
        Dim r As Recordset

        vDescription = ""

        If Me![Description] <> "" Then vDescription = "[MyFieldName] LIKE('*' + '" & Me![Description] & "' + '*')"

        If Not (vDescription = "") Then
            Set r = [Forms]![MyForm]![MySubform].[Form].Recordset
    >       r.FindNext (vDescription)
            If r.NoMatch Then
                r.MoveFirst
                r.FindNext (vDescription)
                If r.NoMatch Then
                    MsgBox ("No match found.")
                    r.MoveFirst
                End If
            End If
        End If
    End Sub

我找不到此错误消息的任何搜索结果,这似乎很奇怪。为什么我会收到错误消息?我是否正确使用了记录集?我应该以不同的方式处理 OrderBy/OrderByOn 吗?

4

1 回答 1

1

我不明白你的代码发生了什么。测试这个版本,看看它是否能解决问题。

Private Sub Search_Click()
    Dim vDescription As String
    Dim r As DAO.Recordset

    vDescription = vbNullString ' not actually required '

    If Len(Me![Description] & vbNullString) > 0 Then
        vDescription = "[MyFieldName] LIKE '*" & _
            Me![Description] & "*'"
        Debug.Print "vDescription: " & vDescription
        Set r = [Forms]![MyForm]![MySubform].[Form].RecordsetClone
        r.FindNext vDescription
        If r.NoMatch Then
            r.MoveFirst
            r.FindNext vDescription
            If r.NoMatch Then
                MsgBox "No match found."
                r.MoveFirst
            End If
        End If
        Set r = Nothing
    End If

结束子

于 2012-09-17T18:33:34.540 回答