2008-12-30 13 views
9

Ist Microsoft Access Volltextsuche?Ist Microsoft Access Volltextsuche?

Ich weiß, dass MySQL und SQL Server Volltextsuche haben, aber ich bin nicht zu sicher auf Access.

Wenn Access keinen Volltext hat, was ist die beste Alternative, um dasselbe Ziel der Volltextsuche zu erreichen?

Dank

+5

Verwenden Sie nicht Access. Das ist deine beste Wette. – yfeldblum

+2

Höre auf Gerechtigkeit, er ist weise. –

+0

Danke Gerechtigkeit und Steven! –

Antwort

3

Ich bin nicht 100% sicher, aber die Tatsache, dass this site von Microsoft Access schlägt mir nicht erwähnt, dass die Antwort „nein“ ist.

Meine Bauchreaktion wäre auch "Nein". Access sollte nicht die ne plus ultra in relationalen Datenbank-Technologie sein. Wenn dies der Fall wäre, gäbe es keinen Grund für SQL Server.

-1

Zugang ist keine Datenbank suchen. Es wird jedoch mit einer Standard-Datenbank-Engine Jet/ACE geliefert. Ich nehme an, dass du das meinst, aber du solltest klarer sein, was du meinst, wenn du eine Frage wie diese stellst.

Jet/ACE verfügt über keine Volltextsuchfunktionen.

Die Volltextsuche von Jet/ACE-Datendateien erfolgt am besten über die Volltextsuchfunktionen für Dateien auf Ihrem Computer. Dies wird nicht schnell sein, noch wird es über SQL nutzbar sein.

Sie sagen nicht, welcher Kontext das ist, aber ich habe im Allgemeinen nie eine Notwendigkeit für die Volltextsuche außer auf Websites gesehen (wo es etwas von einer erwarteten Fähigkeit ist). Wenn Sie Jet/ACE als Datenspeicher für eine HTTP-Anwendung verwenden, haben Sie den falschen Datenspeicher ausgewählt. Jet/ACE kann zwar für schreibgeschützte Websites mit geringem Volumen verwendet werden, dies ist jedoch nicht empfehlenswert (aufgrund von Einschränkungen in der Jet/ACE-Datenbank-Engine).

Wenn Sie eine Volltextsuche benötigen, benötigen Sie eine andere Datenbank-Engine.

+3

Zugriff ist ein DBMS mit einer eingeschalteten Entwicklungsplattform (VBA, Access Forms und Reports). Eine Access-Datei kann eine Datenbank sein, aber nicht unbedingt. Wenn Sie diese Dinge nicht angeben, wird Ihr Beitrag neue Benutzer nur verwirren und ihnen nicht helfen, ihr Verständnis des Produkts zu entwickeln, da Access allgemein als Datenbank bezeichnet wird. Auf die gleiche Weise ist SQL Server keine Datenbank, sondern ein DBMS. Der Unterschied zwischen SQL Server und Access besteht darin, dass es sich bei SQL Server-Dateien immer um Datenbankdateien handelt. – awrigley

+0

@awrigley: Wie ist dein Kommentar etwas anderes als nur das, was ich in meiner Antwort gesagt habe? Ich bin ziemlich klar in meiner Antwort, dass ich über die Jet/ACE-Datenbank-Engine spreche. Es gibt keine Zweideutigkeit in dem, was ich geschrieben habe. Sie sollten den Downvote wirklich umkehren, da Ihr Kommentar nur Kauderwelsch ist. –

+2

Ein Neuling in Access liest eine Antwort, die besagt, Access ist keine Datenbank, aber der Kommentar erweitert nicht, was Access außer in Akronyme ist? Das ist Kauderwelsch für einen Neuling. Der Downvote steht nicht nur, weil dein Kommentar kindisch ist. – awrigley

-1

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

Es geht um das Such-Tool verwenden. Ich habe es noch nicht ausprobiert und bin mir nicht sicher, ob es auf Memo-Feldern funktioniert.

+1

Das ist nicht annähernd dasselbe wie die Volltextsuche. FTS ist eine programmatische Methode zum Durchsuchen einer oder mehrerer Spalten in einer oder mehreren Tabellen innerhalb einer Datenbank. Das CTRL + F-Element, mit dem Sie verlinkt haben, ist ein einmaliger Typ und wird sicherlich nicht durch Code gesteuert. – NotMe

+0

Ohne es zu betrachten @DNRTech könnte auf dem richtigen Weg sein, indem Sie ein Docmd ausführen. finden Sie schnell einige grundlegende Daten abrufen. – Ewen

2

Der erste Schritt in der Volltextsuche besteht darin, eine Wortliste zu erstellen, die alle Wörter in der Datenbank enthält. Die Volltextsuche hat auch andere Funktionen wie stemming, die abgeleitete Wörter mit einem Basiswort (schnell, schneller, am schnellsten) in Beziehung setzt und Stoppwörter enthält, die ignoriert werden, weil sie so gebräuchlich sind (und das). Ein kleiner VBA-Code kann eine Wortliste erzeugen, die visuell gescannt werden kann. Mit ein wenig mehr Arbeit wäre es möglich, Code zu verwenden, um die Wortliste zuerst zu prüfen, bevor die Datenbank durchsucht wird, und dies könnte die Suche viel schneller machen. Unten ist ein Code, den ich für diesen Zweck erstellt habe. Seine Anwendung im wirklichen Leben ist es, die Namen der Menschen in der Datenbank zu finden, so dass ich sie für den Schutz der Privatsphäre entfernen oder ändern kann, und als Biologe möchte ich wissenschaftliche Namen in Berichten kursiv darstellen. Wenn ich eine Liste von wissenschaftlichen Namen erstellen kann, dann kann ich sie durch den in html-Tags enthaltenen Namen ersetzen.

Der Code funktioniert gut, aber ich habe es nicht ausgiebig oder gegen große Memo-Felder/Rich-Text-Felder getestet. Es wurde in Access 2010 geschrieben.

'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 
0

Der Beispielcode, @duffymo funktioniert sehr gut zur Verfügung stellt. Ich benutze es mit Microsoft Access 2003. Aber ein paar Korrekturen sind notwendig.

  1. Die Tabelle muss definiert werden, wie: ‚Dieser Code eine Tabelle tblWordList mit Feldern genannt Wort (Text 255), Wordcount (Anzahl), FirstCopyID (Zahl)

  2. genannt erfordert
  3. die andere Lösung ist tblWordCounts benötigt mit tblWordList ersetzt werden, und natürlich die Anruf CreateWordList muss in die Tabelle und das Feld geändert werden, das an tblWordList gesendet werden muss.

Auf einem 5000 Rekord-Tabelle es so schnell lief ich dachte, dass es nicht funktioniert, wenn ich auf Sub ScopeWordList geklickt() und gedrückt F5, aber das Modul eine Wortliste mit über 700 verschiedene Datensätze erstellt (für meine Datentabelle). Danke @duffymo für einige nette Beispielcode.