运行时错误'1006':未知

时间:2012-09-17 18:02:20

标签: vba ms-access

我在Microsoft Access 2007中有一个列表表单,我正在尝试创建一个按钮来搜索给定短语的其中一个字段。问题是我正在尝试搜索的字段是备注字段,我通常希望保持记录的排序(通过计数字段)。这会将我的备注字段截断为255个字符,并使该字段的其余部分无法搜索。因此,在搜索表单的Form_Open事件期间,我一直在关闭我正在搜索的表单(或将“OrderBy”设置为“”)的“OrderByOn”属性,这似乎正确地取消了我的数据并使其成为备忘录字段完全可见。但是,当我尝试搜索时,有时会在到达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吗?

1 个答案:

答案 0 :(得分: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

End Sub