我在Access中拥有一个包含大量表格的数据库。不幸的是,创建者使用了非描述性的名称,因此基本上不可能通过查看其名称来猜测表格是什么。我需要紧急找到一个包含某些数据的表,我很确定我知道它的某些列的名称,或者至少包含列名称中包含的单词。基本上,我需要的是某种“在整个数据库中的每个表中按列名搜索”,它显示包含某些列名的所有表。
在我开始像猴子一样逐一去之前,有没有办法实现这一目标?
答案 0 :(得分:7)
此过程将列出名称中包含您提供的文本的任何列的表名和列名。结果将打印在立即窗口中(使用 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
答案 1 :(得分:2)
有一种方法可以找到具有特定列名的所有表,但它需要一些代码(而不是只能运行查询)。
首先,您需要在数据库中使系统表“可见”。您没有提到正在使用哪个版本的MS Access,但选项对话框应该允许along these lines。
这会公开包含所有用户表名的表MSysObjects
。
您可能会想要遍历所有用户表,将名称传递给某些代码,这些代码将表格作为DAO.TableDef
个对象打开,并检查相应Fields
集合的属性。
Allen Browne some VBA code that displays these attributes。您可以根据自己的需要进行自定义。