我在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吗?
答案 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