Найти все варианты использования запроса в приложении доступа - PullRequest
2 голосов
/ 12 марта 2009

Я создал автономное приложение Access 2003 с кучей форм, которое начинает становиться неуправляемым. Я пытаюсь немного его очистить, и я хотел бы сделать что-то, например, найти все варианты использования запроса, чтобы я мог сделать глобальные обновления. Я могу использовать ctrl-f, чтобы найти использование запроса в коде, но мой вопрос: есть ли простой способ поиска по всему приложению, чтобы найти, где запросы используются в окне свойств элемента управления, например, когда они напрямую связаны с элементом управления

Было бы неплохо программно сбросить все свойства всех форм в текстовые файлы.

Ответы [ 6 ]

3 голосов
/ 13 марта 2009

Щелкните правой кнопкой мыши запрос в окне базы данных и выберите «Зависимости объектов». Это должно дать вам список форм, в которых он размещен как подформа.

Это работает только в том случае, если у вас включена информация об автозамене дорожки, которая используется по умолчанию. Я лично отключаю это, поскольку это раздувает БД.

1 голос
/ 13 марта 2009

Как пишет DJ: это путь. Он работает довольно хорошо, он обнаруживает все запросы, даже те, которые используются в комбинированных списках и т. Д. Хотя я не думаю, что он найдет запросы, которые используются в коде.

И если вы измените запрос (например, имя), все ссылки на этот запрос также будут обновлены.

0 голосов
/ 06 июня 2009

Я знаю, что это немного старо, но это выглядело как интересный вызов. Если вы вставите это в модуль и запустите его, он создаст текстовый файл с RecordSource для каждой формы и RowSource для каждого ComboBox или ListBox с RowSourceType «Table / Query». Если я правильно помню, это должно дать вам все свойства, где можно использовать запрос. Если я не помню правильно, вы можете настроить код, чтобы получить другие или изменить формат вывода.

Если вы хотите сбросить все свойства всех форм, вы можете сделать цикл для каждого цикла в коллекции свойств формы и записать его в файл. Проблема заключается в том, что формы имеют определенные свойства, такие как PrtMip и PrtDevName, которые являются структурами и поэтому нарушают методы write или writeline, поэтому, если вы собираетесь попытаться записать их в файл, сначала вам нужно будет выполнить специальную обработку , Кроме того, я считаю, что свойство закладки также может быть проблематичным.

Sub ListProperties()
    Dim frm As Object
    Dim ctl As Control

    Dim fs As Object
    Dim file As Object

    Set fs = CreateObject("Scripting.FileSystemObject")
    Set file = fs.CreateTextFile("C:\FormProps.txt", True)

    For Each frm In CurrentProject.AllForms
        DoCmd.OpenForm frm.Name, acNormal, , , , acHidden
    Next frm

    For Each frm In Forms
        file.writeline (frm.Name)
        file.writeline (String(Len(frm.Name), "-"))
        file.writeline "RecordSource" & Chr(9) & frm.Properties("RecordSource")

        For Each ctl In frm.Controls
            With ctl
                Select Case .ControlType
                    Case acComboBox, acListBox
                        .SetFocus
                        If .RowSourceType Like "Table/Query" Then
                            file.writeline Chr(9) & .Name & Chr(9) & "RowSource" & Chr(9) & .RowSource
                        End If
                End Select
            End With
        Next ctl

        file.writeline
    Next frm

    For Each frm In Forms
        DoCmd.Close acForm, frm.Name
    Next frm

End Sub
0 голосов
/ 15 марта 2009

Как многолетний пользователь Access, который зарабатывает на этом, я не рекомендую автозамену Name. Для таких вещей я использую утилиту поиска и замены. Я давний владелец Speed ​​Ferret от Black Moshannon, но это было довольно проблематично с момента выпуска A2003, поскольку изначально не поддерживало более свежие версии. Другая альтернатива, которую я на самом деле не использовал, но которую рекомендуют другие, это Поиск и замена Рика Фишера .

0 голосов
/ 13 марта 2009

Формы могут быть сохранены в текстовые файлы с помощью SaveAsText:

Sub FormToText()
Dim frm
For Each frm In CurrentProject.AllForms
    Application.SaveAsText acForm, frm.Name, "c:\docs\" & frm.Name & ".txt"
Next
End Sub

Вы можете получить много информации из системных таблиц MsysObjects и MsysQueries.

0 голосов
/ 13 марта 2009

Нет ничего встроенного, но вы должны быть в состоянии получить функциональность, написав некоторый код, который перебирает коллекцию CurrentProject.AllForms для циклического прохождения всех форм. Для каждой формы проверьте свойства, в которых может содержаться запрос, и составьте список.

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