7

Access でオブジェクト プロパティなどの特定のテキストを検索する方法はありますか? VBA ソース コードだけではありません。

たとえば、テーブル内のフィールドの名前を変更すると、多くのオブジェクト プロパティ (レコード ソース、コントロール ソース、Order By など) を確認する必要があるため、これを求めています。これは試行錯誤またはフォームの各コントロールのすべてのプロパティをチェックすることで実行できますが、これには多くの時間がかかります。

1 つのオプションは、検索と置換ツール (素晴らしいツールです!) ですが、私には少しやり過ぎです。テキストの置換は必要ありません (「検索」のみ)。年に数回しか使用しないツールで 37 ドルです。

他の提案?

4

3 に答える 3

15

一部の関数またはクエリが予期しない場所 (たとえば、サブクエリ内のバインドされたコントロールの RowSource) に隠れている可能性がある場所を見つけるためによく使用するものがあります。

文書化されていない機能を使用して、すべての Access オブジェクトを生のテキスト ファイルとしてエクスポートします。
フォルダー内のファイル内を再帰的に検索できるテキスト エディター (たとえば、無料のNotepad++など) を使用すると、特定の文字列が埋もれている場合でも、すべての出現を見つけることができると確信しています。

すべてのオブジェクトをエクスポートするためのコードには、IsBlank() 関数が含まれています。

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

これを使用するには、Access IDE のイミディエイト ウィンドウから呼び出すだけでDocDatabase、すべてのファイルを含む 'Exploded View' フォルダーの下に一連のディレクトリが作成されます。

于 2011-06-20T10:46:44.610 に答える
1

上記のコードを修正して、オブジェクト名に「~」が含まれる一時オブジェクトを次のように削除しました。

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
于 2015-03-30T15:21:06.370 に答える
1

もう 1 つのオプションは、NAME AUTOCORRECT オプションを一時的にオンにすることです。これは不適切に実装された機能であり、運用展開のためにそのままにしておくとデータベースに損傷を与える可能性がありますが、他の誰かが作成した Access アプリを引き継いで、私の命名規則を使用するように変換するときによく使用します。

基本的にオンにして、依存関係テーブルを構築させてから、変更を加えます。その後、依存関係のツリーをたどって、それらがすべて取得されたことを確認できます。完了したら、オフにします。

ただし、VBA コードでは機能しません。しかし、フィールド名の変更などには、慎重に使用すればかなり便利です。

于 2011-06-21T00:33:51.850 に答える