2012-09-17 82 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

相關問題