13

Microsoft Access には全文検索機能がありますか?

MySQL と SQL Server には全文検索があることは知っていますが、Access についてはよくわかりません。

Access にフル テキストがない場合、フル テキスト検索の同じ目的を達成するための最良の代替手段は何ですか?

ありがとう

4

6 に答える 6

3

100% 確信があるわけではありませんが、Microsoft のこのサイトが Access について言及していないという事実は、答えが「いいえ」であることを示唆しています。

私の腸の反応も「いいえ」です。Access は、リレーショナル データベース テクノロジの最先端を行くものではありませんでした。もしそうなら、SQL Server を使用する理由はありません。

于 2008-12-30T02:51:14.010 に答える
2

全文検索の最初のステップは、データベース内のすべての単語を含む単語リストを作成することです。全文検索には、ステミングなどの他の機能もあり、派生語を基本語に関連付けます (高速、高速、最速)。ストップ ワードは非常に一般的であるため無視されます (and、the)。少しの VBA コードで、視覚的にスキャンできる単語リストを生成できます。もう少し作業を進めれば、コードを使用して、データベースを検索する前に最初に単語リストをチェックすることが可能になり、これにより検索が大幅に高速化される可能性があります。以下は、目的のために作成したコードです。その実際のアプリケーションは、データベースで人々の名前を見つけて、プライバシー保護のためにそれらを削除または変更できるようにすることです。生物学者として、レポートで学名を斜体にしたいと考えています。学名のリストを作成できれば、

コードはうまく機能しますが、広範囲にテストしたり、大きなメモ フィールドやリッチ テキスト フィールドに対してテストしたりしていません。アクセス2010で書いています。

'This code requires a table called tblWordList with fields called Word (str 255), WordCount (long), FirstCopyID (long)

Option Compare Database
Option Explicit

'Click on this procedure and press F5 to run the code
Private Sub ScopeWordList()

    'A list of tables and fields that need to be processed
    Call CreateWordList("Issues", "IssueSummary", "IssueID")

End Sub

'The main routine that finds new words
Public Sub CreateWordList(TableName As String, FieldName As String, ForeignKey As String)

    Dim dbs As Database
    Dim rst As Recordset
    Dim SQL_Statement As String

    Dim r As Recordset

    Dim RowText As String
    Dim OriginalWord As String
    Dim SearchWord As String
    Dim SearchTerm As String
    Dim Quote As String: Quote = Chr$(34)
    Dim i As Long
    Dim RecNum As Long

    SQL_Statement = "SELECT " & FieldName & ", " & ForeignKey & " AS FirstCopyID FROM " & TableName & " WHERE " & FieldName & " IS NOT NULL;"
    Set dbs = CurrentDb()
    Set rst = dbs.OpenRecordset(SQL_Statement, dbOpenSnapshot)

    Set r = dbs.OpenRecordset("tblWordCounts", dbOpenTable)
    r.Index = "Word"

    With rst
    If .RecordCount = 0 Then GoTo ExitCreateWordList

    Do Until .EOF
        Dim RowWords As Variant 'holds an array which needs to be created
        RowText = .Fields(0)
        'strip out quotes, slashes and other characters
        RowText = CleanLine(RowText)
        'split data into words
        RowWords = Split(RowText, Space(1))

        For i = LBound(RowWords) To UBound(RowWords)
            OriginalWord = RowWords(i)
            SearchWord = Left(Trim(OriginalWord), 254)
            If Len(SearchWord) > 0 Then
                    r.Seek "=", SearchWord
                    If r.NoMatch Then
                        r.AddNew
                        r!Word = SearchWord
                        r!wordcount = 1
                        'records ID field of first occurrence, so you can debug unexpected results
                        r!FirstCopyID = !FirstCopyID
                        r.Update
                    Else
                        r.Edit
                        r!wordcount = r!wordcount + 1
                        r.Update
                    End If
                End If
'            End If
        Next i
        RecNum = RecNum + 1
        If RecNum Mod 20 = 0 Then Debug.Print "Record " & RecNum
        .MoveNext
    Loop

ExitCreateWordList:
    End With
    Debug.Print "Done"
    Set rst = Nothing
    Set dbs = Nothing


End Sub

'Need to clean out unwanted characters and replace then with normal spaces
Private Function CleanLine(RowText As String) As String

        Dim X As Long
        Dim Y As String
        Dim Z As Long
        Dim W As String

        For X = 1 To Len(RowText)
            Y = Mid(RowText, X, 1)
            Z = Asc(Y)
            Select Case Z
                Case 65 To 90      'capital letters
                    W = W & Y
                Case 97 To 122     'lowercase letters
                    W = W & Y
                Case Else
                    W = W & Space(1)
            End Select
        Next
        CleanLine = W

End Function

'Delete all records in Word List table
Public Sub ClearWordList()

    Dim SQL_Statement As String

    'Delete all records from tblWordCounts
    SQL_Statement = "DELETE FROM tblWordCounts"
    DoCmd.SetWarnings False
    DoCmd.RunSQL SQL_Statement
    DoCmd.SetWarnings True

End Sub
于 2014-12-31T23:19:57.983 に答える
1

クライアント展開可能なデータベースを探している場合、MSDE (現在は Sql Server Express と呼ばれています)にはフルテキスト インデックスがあります。

于 2008-12-30T03:37:48.003 に答える
-1

http://www.dummies.com/how-to/content/finding-records-in-your-access-2003-tables.html

検索ツールの使い方についてです。まだ試していませんが、メモ フィールドで機能するかどうかはわかりません。

于 2011-02-17T18:20:38.780 に答える
-2

アクセスはデータベースではありません。ただし、デフォルトのデータベースエンジンであるJet/ACEが付属しています。それがあなたの言っていることだと思いますが、このような質問をするときは、あなたが何を意味しているのかをより明確にする必要があります。

Jet/ACEには全文検索機能はありません。

Jet / ACEデータファイルの全文検索を行う最良の方法は、コンピューター上のファイルに対して全文検索機能を使用することです。これは高速ではなく、SQLを介して使用することもできません。

これがどのようなコンテキストであるかはわかりませんが、一般に、Webサイト(期待される機能のようなもの)を除いて、全文検索の必要性は見たことがありません。HTTPアプリケーションのデータストアとしてJet/ACEを使用している場合は、間違ったデータストアを選択しています。Jet / ACEは、少量の読み取り専用Webサイトでは正常に機能しますが、これはお勧めできません(Jet / ACEデータベースエンジンの制限のため)。

全文検索が必要な場合は、別のデータベースエンジンが必要です。

于 2010-07-28T19:18:15.827 に答える