在访问应用程序中查找查询的所有用法

时间:2009-03-12 20:54:24

标签: ms-access properties

我创建了一个独立的Access 2003应用程序,其中包含一堆开始变得难以驾驭的表单。我正在尝试清理它,我想做一些事情,比如查找查询的所有用法,以便我可以进行一些全局更新。我可以使用ctrl-f在代码中查找查询的用法,但我的问题是:是否有一种简单的方法来搜索整个应用程序,以查找控件的属性窗口中使用查询的位置,例如当它们直接绑定到控件时?

以编程方式将所有表单的所有属性转储到文本文件中会很不错。

6 个答案:

答案 0 :(得分:3)

右键单击数据库窗口中的查询,然后选择“对象依赖项”这将为您提供将其作为子表单托管的表单列表。

这仅在您启用了“轨道名称自动更正信息”时才有效,这是默认设置。我亲自关闭它,因为它膨胀数据库。

答案 1 :(得分:1)

就像DJ写道:这是要走的路。它工作得很好,它会检测所有查询,甚至是组合框中使用的查询等。虽然我认为它不会找到代码中使用的查询。

如果您更改查询(例如名称),则对该查询的所有引用也将更新。

答案 2 :(得分: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)

作为使用它谋生的Access的长期用户,我不建议使用名称自动更正。对于这些类型的东西,我使用搜索和替换实用程序。我一直是Black Moshannon's Speed Ferret的长期所有者,但自从A2003发布以来它一直存在问题,因为它本身不支持更新的版本。我没有真正使用的另一种选择,但其他人推荐的是Rick Fisher's Find and Replace

答案 4 :(得分:0)

我知道这有点旧,但它看起来像一个有趣的挑战。如果将其粘贴到模块中并运行它,它将为每个表单生成一个带有RecordSource的文本文件,为RowSourceType为“Table / Query”的每个ComboBox或ListBox生成一个RowSource。如果我没记错的话,那应该可以获得可以使用查询的每个属性。如果我没有正确记住,你可以调整代码以获取其他代码或更改输出的格式。

如果要转储所有表单的所有属性,可以为表单的属性集合中的每个循环执行一次,并将其写入文件。问题在于表单具有某些属性,如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

答案 5 :(得分:-1)

没有内置任何内容,但您应该能够通过编写迭代通过CurrentProject.AllForms集合的代码来遍历所有表单来获得功能。对于每个表单,请检查可能包含查询的属性并创建列表。