我正在对我继承的复杂MS Access 2003数据库进行逆向工程。
有没有办法列出引用表或查询的所有模块的名称?
我更愿意使用VBA,而不是购买第三方工具。
提前致谢!
答案 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