2011-06-20 35 views
5

Có cách nào trong Access để tìm kiếm một văn bản nhất định trong thuộc tính đối tượng hay không? Chỉ cần không chỉ trong mã nguồn VBA.Tìm kiếm văn bản trong các thuộc tính Truy cập các đối tượng

Tôi hỏi điều này bởi vì nếu tôi thay đổi ví dụ tên của một trường trong bảng tôi đã kiểm tra nhiều thuộc tính đối tượng (Nguồn bản ghi, Nguồn điều khiển, Thứ tự theo, ...). Điều này có thể được thực hiện bằng dấu vết và lỗi hoặc bằng cách kiểm tra tất cả các thuộc tính của mỗi điều khiển của biểu mẫu, nhưng phải mất rất nhiều thời gian.

Một tùy chọn là công cụ Find and Replace (công cụ tốt đẹp!), Nhưng đó là một chút quá mức cần thiết đối với tôi. Tôi không cần một văn bản thay thế (chỉ 'tìm') và nó là 37 đô la cho một công cụ tôi sẽ chỉ sử dụng một vài lần một năm.

Các đề xuất khác?

Trả lời

14

Có điều gì đó tôi thường sử dụng để tìm ra nơi một số chức năng hoặc truy vấn có thể ẩn ở đâu đó không mong muốn (trong RowSource của một điều khiển bị ràng buộc trong một truy vấn phụ chẳng hạn).

Tôi sử dụng tính năng không có giấy tờ để xuất tất cả các đối tượng Access dưới dạng tệp văn bản thô.
Sử dụng trình soạn thảo văn bản có thể tìm kiếm trong các tệp đệ quy dưới một thư mục (ví dụ như ví dụ Notepad++ miễn phí). Tôi tự tin rằng tôi tìm thấy tất cả các lần xuất hiện, được chôn vùi, của một chuỗi cụ thể.

Bộ luật xuất khẩu tất cả các đối tượng bao gồm IsBlank() function tôi:

'==================================================================== 
' Name: DocDatabase 
' Purpose: Documents the database to a series of text files 
' From: http://www.datastrat.com/Code/DocDatabase.txt 
' Author: Arvin Meyer 
' Date: June 02, 1999 
' Comment: Uses the undocumented [Application.SaveAsText] syntax 
'   To reload use the syntax [Application.LoadFromText] 
'   Modified to set a reference to DAO 8/22/2005 
'   Modified by Renaud Bompuis to export Queries as proper SQL 
'==================================================================== 
Public Sub DocDatabase(Optional path As Variant = Null) 
    If IsBlank(path) Then 
     path = Application.CurrentProject.path & "\" & Application.CurrentProject.Name & " - exploded view\" 
    End If 

    On Error Resume Next 
    MkDir path 
    MkDir path & "\Forms\" 
    MkDir path & "\Queries\" 
    MkDir path & "\Queries(SQL)\" 
    MkDir path & "\Reports\" 
    MkDir path & "\Modules\" 
    MkDir path & "\Scripts\" 

    On Error GoTo Err_DocDatabase 
    Dim dbs As DAO.Database 
    Dim cnt As DAO.Container 
    Dim doc As DAO.Document 
    Dim i As Integer 

    Set dbs = CurrentDb() ' use CurrentDb() to refresh Collections 

    Set cnt = dbs.Containers("Forms") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acForm, doc.Name, path & "\Forms\" & doc.Name & ".txt" 
    Next doc 

    Set cnt = dbs.Containers("Reports") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acReport, doc.Name, path & "\Reports\" & doc.Name & ".txt" 
    Next doc 

    Set cnt = dbs.Containers("Scripts") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acMacro, doc.Name, path & "\Scripts\" & doc.Name & ".txt" 
    Next doc 

    Set cnt = dbs.Containers("Modules") 
    For Each doc In cnt.Documents 
     Application.SaveAsText acModule, doc.Name, path & "\Modules\" & doc.Name & ".txt" 
    Next doc 

    Dim intfile As Long 
    Dim filename as String 
    For i = 0 To dbs.QueryDefs.count - 1 
     Application.SaveAsText acQuery, dbs.QueryDefs(i).Name, path & "\Queries\" & dbs.QueryDefs(i).Name & ".txt" 
     filename = path & "\Queries(SQL)\" & dbs.QueryDefs(i).Name & ".txt" 
     intfile = FreeFile() 
     Open filename For Output As #intfile 
     Print #intfile, dbs.QueryDefs(i).sql 
     Close #intfile 
    Next i 

    Set doc = Nothing 
    Set cnt = Nothing 
    Set dbs = Nothing 

Exit_DocDatabase: 
    Debug.Print "Done." 
    Exit Sub 

Err_DocDatabase: 
    Select Case Err 

    Case Else 
     MsgBox Err.Description 
     Resume Exit_DocDatabase 
    End Select 

End Sub 

Để sử dụng nó, chỉ cần gọi DocDatabase từ cửa sổ ngay trong Access IDE, nó sẽ tạo ra một tập hợp các thư mục dưới và 'đã thúc đẩy View' thư mục chứa tất cả các tệp.

+0

tuyệt vời !! Cảm ơn bạn. – waanders

+0

+1 Tôi đã thêm liên kết đến chức năng IsBlank(). Blog đẹp. Điều đó sẽ hữu ích cho tôi. – HansUp

+1

Hãy nghĩ rằng tôi thích 'Đường dẫn tùy chọn hơn là String =" "', nhưng đó có lẽ chỉ là tôi tránh biến thể ở bất cứ đâu tôi có thể. – HansUp

1

Một tùy chọn khác là tạm thời bật tùy chọn NAME AUTOCORRECT. Đó là một tính năng được triển khai kém và có thể làm hỏng cơ sở dữ liệu của bạn nếu còn lại để triển khai sản xuất, nhưng tôi thường sử dụng nó khi tiếp quản ứng dụng Access được tạo bởi người khác để chuyển đổi nó để sử dụng quy ước đặt tên của tôi.

Bạn về cơ bản bật nó lên, hãy để nó xây dựng bảng phụ thuộc, sau đó thực hiện thay đổi của bạn. Sau đó bạn có thể đi bộ cây phụ thuộc để xác nhận rằng nó có tất cả. Khi bạn hoàn tất, bạn tắt nó đi.

Tuy nhiên, nó không hoạt động đối với mã VBA. Nhưng để thay đổi tên trường và tương tự, nó khá hữu ích nếu được sử dụng cẩn thận.

+0

Cảm ơn! Sau một số googling tôi cũng tìm thấy điều này: http://www.allenbrowne.com/ser-73.html – waanders

1

tôi sửa đổi mã ở trên để loại bỏ đối tượng tạm thời với "~" trong tên đối tượng như sau:

Set cnt = dbs.Containers("Scripts") 
For Each doc In cnt.Documents 
    If Not doc.Name Like "~*" Then 
     Application.SaveAsText acMacro, doc.Name, path & "\Scripts\" & doc.Name & ".txt" 
    End If 
Next doc 
Các vấn đề liên quan