2009-03-12 2 views
2

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

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

ответ

-1

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

0

Форма может быть сохранена в текстовые файлы с помощью 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.

3

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

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

+0

Это зависит от версии. – Fionnuala

+0

Какая версия этого не делает (кстати, 2003 делает) – BIBD

+0

Имя AutoCorrect было введено в A2000, но я не знаю, были ли они зависимыми от объектов.Я никогда не использовал функцию автозамены Name, потому что она слишком опасна и слишком дестабилизирована, поэтому я бы не рекомендовал этого. –

1

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

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

0

Как долгосрочный пользователь Access, который зарабатывает на жизнь этим, я не рекомендую AutoCorrect Name. Для таких вещей я использую утилиту поиска и замены. Я был давним владельцем Black Moshannon's Speed Ferret, но с момента выпуска A2003 это было довольно проблематично, так как оно не поддерживает более поздние версии. Другая альтернатива, которую я не использовал, но которую другие рекомендуют, - Rick Fisher's Find and Replace.

0

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

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

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