Текст-поиск в свойствах Доступ к объектам - PullRequest
5 голосов
/ 20 июня 2011

Есть ли в Access способ поиска определенного текста в свойствах объекта и т. Д.?Просто не только в исходном коде VBA.

Я спрашиваю это, потому что, если я изменяю, например, имя поля в таблице, я должен проверить множество свойств объекта (Источник записи, Источник управления, Сортировать по, ...).Это может быть сделано методом «след и ошибка» или проверкой всех свойств каждого элемента управления форм, но это занимает много времени.

Одним из вариантов является инструмент Найти и заменить (хороший инструмент!), но для меня это немного излишне.Мне не нужна замена текста (только «найти»), и это 37 долларов за инструмент, который я буду использовать только несколько раз в год.

Другие предложения?

Ответы [ 3 ]

14 голосов
/ 20 июня 2011

Есть кое-что, что я часто использую, чтобы выяснить, где какая-то функция или запрос может скрываться где-то неожиданно (например, в связанном элементе 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

Чтобы использовать его, просто вызовите DocDatabase из окна Immediate в Access IDE, оно создаст набор каталогов в папке «Разобранный вид» и будет содержать все файлы.

1 голос
/ 30 марта 2015

Я изменил приведенный выше код для удаления временных объектов с символом «~» в имени объекта следующим образом:

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
1 голос
/ 21 июня 2011

Другой вариант - временно включить опцию NAME AUTOCORRECT. Это плохо реализованная функция, которая может повредить вашу базу данных, если оставить ее для производственного развертывания, но я очень часто использую ее, когда беру на себя приложение Access, созданное кем-то другим, чтобы преобразовать его в мои соглашения об именах.

Вы в основном включаете его, позволяете ему построить таблицу зависимостей, затем вносите изменения. Затем вы можете пройтись по дереву зависимостей, чтобы убедиться, что оно получило их все. Когда вы закончите, вы выключите его.

Однако, это не работает для кода VBA. Но для изменения имен полей и т. П. Весьма полезно, если их использовать осторожно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...