2012-09-17 59 views
1

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

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吗?

+0

什么特别,我应该在vDescription寻找?现在它是'[MyFieldName] LIKE('*'+'StuffITypedIn'+'*')'。是的,当我不需要它们时,括号是我的一个坏习惯。我摆脱了他们,同样的错误。 – serme

回答

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 

末次

+0

错误仍然显示出来,并且vDescription现在是'[MyFieldName] LIKE('* StuffITypedIn *')',但是如果我使用RecordsetClone而不是Recordset,它实际上不会在找到匹配项时移动到下一条记录。 – serme

+0

我不明白你如何使用我的代码示例在'vDescription'中得到括号。同时,使用'RecordsetClone',我认为您需要使用'.Bookmark'属性来实际导航记录,格式如下:'Me.Bookmark = rst.Bookmark'但是这与我正在尝试的点不同;我只感兴趣的是看看我们能否避免你报告的错误。 – HansUp

+0

我的不好,我输入该行而不是复制/粘贴,因为我的真实表单名称更长。已经修复,现在vDescription是'[MyFieldName] LIKE'* StuffITypedIn *''。错误消息仍然发生。感谢你的帮助;在这一点上,我正在考虑从数据库中创建一个新的查询,在该记录集中查找我的搜索条件,然后匹配ID字段以移动到我的表单上的正确记录。 – serme

相关问题