Есть ли в Microsoft Access полнотекстовый поиск?

Есть ли в Microsoft Access полнотекстовый поиск?

Я знаю, что в MySQL и SQL Server есть полнотекстовый поиск, но я не уверен в Access.

Если в Access нет полнотекстового поиска, что является лучшей альтернативой для достижения той же цели, что и полнотекстовый поиск?

Спасибо

Не используйте Access. Это ваш лучший выбор.

yfeldblum 30.12.2008 05:47

Послушайте Справедливость, он мудр.

Steven A. Lowe 30.12.2008 05:50
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
13
2
15 896
6
Перейти к ответу Данный вопрос помечен как решенный

Ответы 6

Ответ принят как подходящий

Я не уверен на 100%, но тот факт, что этот сайт от Microsoft не упоминает Access, подсказывает мне, что ответ - «нет».

Моя внутренняя реакция тоже была бы «нет». Access не был предназначен для использования в качестве ne plus ultra в технологии реляционных баз данных. Если бы это было так, не было бы причин для SQL Server.

MSDE (теперь называется Sql Server Express) имеет полнотекстовую индексацию, если вы ищете базу данных, развертываемую клиентом

Доступ - это не база данных. Но он поставляется с ядром базы данных по умолчанию Jet / ACE. Я предполагаю, что это то, что вы имеете в виду, но вам следует более четко понимать, что вы имеете в виду, когда задаете такой вопрос.

Jet / ACE не поддерживает полнотекстовый поиск.

Лучший способ выполнить полнотекстовый поиск файлов данных Jet / ACE - это использовать любые возможности полнотекстового поиска файлов на вашем компьютере. Это не будет быстро, и его нельзя будет использовать через SQL.

Вы не говорите, что это за контекст, но я вообще никогда не видел необходимости в полнотекстовом поиске, кроме как на веб-сайтах (где это что-то вроде ожидаемой возможности). Если вы используете Jet / ACE в качестве хранилища данных для приложения HTTP, значит, вы выбрали неправильное хранилище данных. Хотя Jet / ACE может нормально работать для веб-сайтов небольшого объема, доступных только для чтения, это не рекомендуется (из-за ограничений в ядре базы данных Jet / ACE).

Если вам нужен полнотекстовый поиск, вам понадобится другой движок базы данных.

Access - это СУБД с прикрепленной платформой разработки (VBA, Access Forms и Reports). Файл Access может быть базой данных, но не обязательно. Если вы не укажете эти вещи, ваш пост только запутает новых пользователей и не поможет им развить понимание продукта, учитывая, что Access обычно называется базой данных. Точно так же SQL Server - это не база данных, а СУБД. Разница в том, что представляют собой файлы, между SQL Server и Access в том, что файлы SQL Server всегда являются файлами базы данных.

awrigley 26.10.2010 12:32

@awrigley: как в вашем комментарии что-то, кроме повторения того, что я сказал в своем ответе? В своем ответе я совершенно ясно понимаю, что говорю о движке базы данных Jet / ACE. В том, что я написал, нет никакой двусмысленности. Вам действительно следует отменить отрицательный голос, так как ваш комментарий - просто тарабарщина.

David-W-Fenton 27.10.2010 00:14

Новичок в Access читает ответ, в котором говорится, что Access не является базой данных, но комментарий не раскрывает, что такое Access, за исключением сокращений? Это чепуха для новичка. Голосование против остается не только потому, что ваш комментарий ребяческий.

awrigley 27.10.2010 00:37

Вы говорите, что мой комментарий повторяет то, что вы говорите, тогда вы говорите, что мой комментарий - тарабарщина. Подумайте об этом. Мой комментарий повторяет то, что вы говорите, таким образом, чтобы это могло помочь человеку, задающему этот вопрос. В этом вся суть SO.

awrigley 27.10.2010 00:42

Вопрос заключается в следующем: «(...) какова лучшая альтернатива (...) j». Это простой способ сказать «смени свой инструмент», но я никогда не буду недооценивать этого автора. Я уверен, что у него / нее есть веские причины оставить инструмент и попытаться найти обходной путь. Нет ничего хорошего в том, чтобы показать свое разочарование в Access и опубликовать личный загадочный обзор Jet / ACE. Утверждение ясно: альтернатива. Опубликуйте это как ответ, если он у вас есть. Все остальные соображения бесполезны и должны быть оставлены в комментариях.

JoeCool 17.03.2021 17:02

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

Речь идет об использовании инструмента поиска. Я еще не пробовал и не уверен, работает ли он с полями для заметок.

Это даже не то же самое, что полнотекстовый поиск. FTS - это программный способ поиска в одном или нескольких столбцах одной или нескольких таблиц в базе данных. Элемент CTRL + F, с которым вы связались, является одноразовым и, конечно же, не контролируется с помощью кода.

NotMe 18.02.2011 18:07

Не смотря на это, @DNRTech может оказаться на правильном пути, выполнив docmd. find, чтобы быстро получить некоторые основные данные.

Ewen 20.08.2015 07:56

Первым шагом в полнотекстовом поиске является создание списка слов, содержащего все слова в базе данных. Полнотекстовый поиск также имеет другие функции, такие как выделение корней, которое связывает производные слова с базовым словом (быстро, быстрее, быстрее всего), и у него есть стоп-слова, которые игнорируются, потому что они очень распространены (и). Небольшой код VBA может создать список слов, который можно визуально сканировать. Приложив немного больше усилий, можно было бы использовать код для проверки списка слов перед поиском в базе данных, и это могло бы значительно ускорить поиск. Ниже приведен код, который я создал для этой цели. Его реальное применение - найти имена людей в базе данных, чтобы я мог удалить или изменить их для защиты конфиденциальности, и как биолог я хочу выделять научные имена в отчетах курсивом. Если я могу создать список научных имен, я могу заменить их именем, заключенным в теги html.

Код работает хорошо, но я не тестировал его всесторонне или с большими мемо-полями / полями с расширенным текстом. Он был написан в Access 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

Пример кода, который предоставляет @duffymo, работает очень хорошо. Я использую его с Microsoft Access 2003. Но необходимо внести пару исправлений.

  1. Таблица должна быть определена как: 'Для этого кода требуется таблица tblWordList с полями Слово (текст 255), WordCount (число), FirstCopyID (число)

  2. Другое исправление - tblWordCounts необходимо заменить на tblWordList, и, конечно же, Вызов CreateWordList необходимо заменить на таблицу и поле, которые необходимо отправить в tblWordList.

В таблице из 5000 записей он работал так быстро, что я подумал, что это не сработает, когда я щелкнул Sub ScopeWordList () и нажал F5, но модуль создал список слов с более чем 700 отдельными записями (для моей таблицы данных). Спасибо @duffymo за аккуратный пример кода.

Другие вопросы по теме