我在 Access 中有一个带有大量表的数据库。不幸的是,创建者使用了非常不具描述性的名称,因此基本上不可能仅通过查看表的名称来猜测表的用途。我需要紧急找到一个包含某些数据的表,并且我很确定我知道它的某些列的名称,或者至少知道列名称中包含的单词。基本上,我需要的是某种“在整个数据库中的每个表中按列名搜索”,它显示包含某些列名的所有表。
在我开始像猴子一样一个接一个之前,有什么办法可以做到这一点?
此过程将列出名称包含您提供的文本的任何列的表名和列名。结果打印在立即窗口中(用Ctrl+去那里g)
Public Sub ListTablesWithColumnNamesContaining(ByVal pText As String)
Dim db As DAO.Database
Dim tdf As DAO.TableDef
Dim fld As DAO.Field
Set db = CurrentDb
For Each tdf In db.TableDefs
For Each fld In tdf.Fields
If InStr(1, fld.Name, pText, vbTextCompare) > 0 Then
Debug.Print tdf.Name & ":", fld.Name
End If
Next fld
Next tdf
Set fld = Nothing
Set tdf = Nothing
Set db = Nothing
End Sub
有一种方法可以找到所有具有特定列名的表,但它需要一些代码(而不是仅仅能够运行查询)。
首先,您需要使系统表在数据库中“可见”。您没有提及正在使用哪个版本的 MS Access,但“选项”对话框应该允许这些内容。
这会公开MSysObjects
包含所有用户表名称的表。
您可能希望遍历所有用户表,将名称传递到一些代码中,这些代码将表作为DAO.TableDef
对象打开并检查相应Fields
集合的属性。
Allen Browne 有一些显示这些属性的 VBA 代码。您可以根据自己的需要对此进行自定义。