2008-12-30 55 views
9

Microsoft Access có tìm kiếm toàn văn bản không?Microsoft Access có Tìm kiếm Toàn văn bản không?

Tôi biết rằng MySQL và SQL Server có tìm kiếm văn bản đầy đủ, nhưng tôi không quá chắc chắn về Access.

Nếu quyền truy cập không có văn bản đầy đủ, lựa chọn nào tốt nhất để đạt được cùng một mục tiêu tìm kiếm toàn văn bản?

Cảm ơn

+5

Không sử dụng Quyền truy cập. Đó là đặt cược tốt nhất của bạn. – yfeldblum

+2

Nghe Tư pháp, anh ấy khôn ngoan. –

+0

Cảm ơn Công lý và Steven! –

Trả lời

3

Tôi không chắc chắn 100%, nhưng thực tế là this site từ Microsoft không đề cập truy cập gợi ý với tôi rằng câu trả lời là "không".

Phản ứng ruột của tôi cũng sẽ là "không". Truy cập không được dự định là ne cộng cực kỳ trong công nghệ cơ sở dữ liệu quan hệ. Nếu nó được, sẽ không có lý do cho SQL Server.

-1

Access không phải là một cơ sở dữ liệu. Nhưng nó có tàu với một cơ sở dữ liệu mặc định, Jet/ACE. Tôi sẽ cho rằng đó là những gì bạn có ý nghĩa, nhưng bạn nên rõ ràng hơn những gì bạn có nghĩa là khi bạn hỏi một câu hỏi như thế này.

Máy bay phản lực/ACE không có bất kỳ khả năng tìm kiếm toàn văn nào.

Cách tốt nhất để thực hiện tìm kiếm toàn văn các tệp dữ liệu Jet/ACE là thông qua bất kỳ khả năng tìm kiếm toàn văn bản nào bạn có cho tệp trên máy tính của mình. Điều này sẽ không nhanh, và cũng không thể sử dụng được thông qua SQL.

Bạn không nói ngữ cảnh này là gì, nhưng tôi nói chung không bao giờ thấy cần tìm kiếm toàn văn, ngoại trừ trên trang web (ở đâu đó là khả năng mong đợi). Nếu bạn đang sử dụng Jet/ACE làm kho dữ liệu cho một ứng dụng HTTP, thì bạn đã chọn lưu trữ dữ liệu sai. Trong khi Jet/ACE có thể hoạt động tốt cho các trang web chỉ đọc có khối lượng thấp, đó không phải là cách sử dụng được khuyến khích (vì những hạn chế trong cơ sở dữ liệu của Jet/ACE).

Nếu bạn cần tìm kiếm toàn văn thì bạn cần một công cụ cơ sở dữ liệu khác.

+3

Truy cập là một DBMS với nền tảng phát triển được bật lên (VBA, Biểu mẫu truy cập và Báo cáo). Tệp Access có thể là một cơ sở dữ liệu, nhưng không nhất thiết. Trừ khi bạn nêu ra những điều này, bài đăng của bạn sẽ chỉ gây nhầm lẫn cho người dùng mới và không giúp họ phát triển sự hiểu biết của họ về sản phẩm, vì rằng Access thường được gọi là cơ sở dữ liệu. Trong cùng một cách, SQL Server không phải là một cơ sở dữ liệu mà là một DBMS. Sự khác biệt, về những gì các tập tin của nó đại diện, giữa SQL Server và Access là các tệp SQL Server luôn là các tệp cơ sở dữ liệu. – awrigley

+0

@awrigley: bình luận của bạn là gì khác hơn là chỉ cần nghỉ ngơi những gì tôi đã nói trong câu trả lời của tôi? Tôi khá rõ ràng trong câu trả lời của tôi rằng tôi đang nói về cơ sở dữ liệu Jet/ACE. Không có sự mơ hồ chút nào trong những gì tôi viết. Bạn thực sự nên đảo ngược các downvote, như bình luận của bạn chỉ là vô nghĩa. –

+2

Một người mới truy cập đọc một câu trả lời cho biết Access không phải là cơ sở dữ liệu, nhưng nhận xét không mở rộng trên những gì Access ngoại trừ từ viết tắt? Đó là vô nghĩa với một người mới. Downvote là viết tắt của, không chỉ vì bình luận của bạn là puerile. – awrigley

-1

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

Đó là về cách sử dụng công cụ tìm. Tôi đã không thử nó và tôi không chắc chắn nếu nó hoạt động trên các lĩnh vực ghi nhớ.

+1

Điều này thậm chí không giống với tìm kiếm văn bản đầy đủ. FTS là một cách có lập trình để tìm kiếm một hoặc nhiều cột trên một hoặc nhiều bảng trong cơ sở dữ liệu. Các CTRL + F mục bạn liên kết đến là một loại tắt của điều và chắc chắn không được kiểm soát thông qua mã. – NotMe

+0

Không nhìn vào nó @DNRTech có thể đang đi đúng hướng bằng cách thực hiện một tài liệu. tìm cách nhanh chóng truy xuất một số dữ liệu cơ bản. – Ewen

2

Bước đầu tiên trong tìm kiếm toàn văn bản là tạo danh sách từ chứa tất cả các từ trong cơ sở dữ liệu. Tìm kiếm văn bản đầy đủ cũng có các tính năng khác như bắt nguồn, liên quan đến các từ có nguồn gốc từ cơ bản (nhanh, nhanh hơn, nhanh nhất) và nó ngừng các từ bị bỏ qua vì chúng quá phổ biến (và,). Một mã VBA nhỏ có thể tạo ra một danh sách từ có thể được quét trực quan. Với một ít công việc hơn, nó sẽ có thể sử dụng mã để kiểm tra danh sách từ trước khi tìm kiếm cơ sở dữ liệu và điều này có thể làm cho tìm kiếm nhanh hơn nhiều. Dưới đây là một số mã mà tôi đã tạo cho mục đích này. Ứng dụng cuộc sống thực của nó là tìm tên người trong cơ sở dữ liệu để tôi có thể loại bỏ hoặc thay đổi chúng để bảo vệ sự riêng tư và là một nhà sinh vật học, tôi muốn in nghiêng tên khoa học trong các báo cáo. Nếu tôi có thể tạo danh sách tên khoa học, thì tôi có thể thay thế chúng bằng tên kèm theo trong thẻ html.

Mã hoạt động tốt nhưng tôi chưa thử nghiệm mã này rộng rãi hoặc chống lại trường ghi nhớ lớn/trường văn bản đa dạng thức. Nó được viết trong 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 
0

Mã mẫu @duffymo hoạt động rất tốt. Tôi sử dụng nó với Microsoft Access 2003. Nhưng một vài bản sửa lỗi là cần thiết.

  1. bảng này cần phải được định nghĩa là: 'Mã này đòi hỏi phải có một bảng gọi là tblWordList với các lĩnh vực được gọi là Word (văn bản 255), Số từ (số), FirstCopyID (số)

  2. việc sửa chữa khác là tblWordCounts cần phải được thay thế bằng tblWordList, và tất nhiên là Gọi CreateWordList cần phải được thay đổi thành bảng và trường cần gửi đến tblWordList.

Trên bàn 5000 kỷ lục nó chạy quá nhanh, tôi nghĩ rằng nó đã không hoạt động khi tôi nhấp vào Sub ScopeWordList() và nhấn F5, nhưng các module tạo ra một danh sách từ với hơn 700 hồ sơ riêng biệt (cho bảng dữ liệu của tôi). Cảm ơn @duffymo để biết một số mã ví dụ gọn gàng.

Các vấn đề liên quan