1

Microsoft Access 2007にリストフォームがあり、フィールドの1つで特定のフレーズを検索するボタンを作成しようとしています。問題は、私が検索しようとしているフィールドがメモフィールドであり、通常、レコードを(カウントフィールドで)ソートしたままにしておきたいということです。これにより、メモフィールドが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 に答える