如何在MS访问中使用表/查询找到所有模块?

时间:2016-04-25 15:15:48

标签: ms-access access-vba

我正在对我继承的复杂MS Access 2003数据库进行逆向工程。

有没有办法列出引用表或查询的所有模块的名称?

我更愿意使用VBA,而不是购买第三方工具。

提前致谢!

2 个答案:

答案 0 :(得分:0)

此查询将返回模块名称,而不是模块中的函数或过程的名称。

SELECT  Name
FROM    MSysNavPaneObjectIDs
WHERE   Type = 32775

答案 1 :(得分:0)

考虑使用内联VBA函数扩展MSys SQL查询,该函数检查模块代码的字符串输出中的表名:

VBA 功能(将其置于标准模块中)

Public Function CheckModules(modulename As String, tblname As String) As Boolean
    Dim strCode As String, linecount As Integer

    linecount = Access.Modules(modulename).CountOfLines
    strCode = Access.Modules(modulename).Lines(1, linecount)

    If strCode Like "*" & tblname & "*" Then
        CheckModules = True
    Else
        CheckModules = False
    End If
End Function

SQL 查询

SELECT [Name] As ModuleName
  FROM MSysNavPaneObjectIDs
 WHERE Type = 32775 
   AND CheckModules([Name], "tblTest") = True

<强> --- --- CAVEAT

为了有效地运行内联函数SQL查询,在运行查询之前打开VBA IDE中的所有模块,然后只需轻松关闭所有模块。不要在Access Query窗口中运行查询:

Dim i As Variant

' OPEN MODULES '    
For Each i In CurrentProject.AllModules
    DoCmd.OpenModule i.Name
Next i

DoCmd.OpenQuery "CheckModulesforTableQ"

' CLOSE MODULES '
For Each i In CurrentProject.AllModules
    DoCmd.Close acModule, i.Name
Next i