我在MS Access 2010中有一个数据库。我不是数据库的创建者,也无法联系他来提出这个问题。它是一个包含许多表和记录的大型数据库,表和列的名称非常不具描述性。基本上,我试图找到哪个表/列存储某些数据,我特别知道数据的值。例如:我知道有一个名为'ABCDEF'的客户,因为我刚刚使用使用该数据库的软件添加了它。现在,我需要知道哪个表存储了这个客户数据。
这有可能吗?一种逐表的方式,按记录记录,逐个字段的字段,并将其与我的字符串进行比较?
答案 0 :(得分:1)
试试这个
Public Sub FindInAllTables(ByVal s As String)
Dim db As DAO.Database, rs As DAO.Recordset
Dim tdf As DAO.TableDef, fld As DAO.Field
Dim pattern As String
pattern = "*" & s & "*"
Set db = CurrentDb
For Each tdf In db.TableDefs
If (tdf.Attributes And dbSystemObject) = 0 Then
On Error Resume Next
Set rs = tdf.OpenRecordset(dbOpenSnapshot)
If err.Number = 0 Then
On Error GoTo 0
Debug.Print "Scanning [" & tdf.Name & "] ";
Do Until rs.EOF()
For Each fld In rs.Fields
If fld.Value Like pattern Then
Debug.Print
Debug.Print " Match in [" & tdf.Name & "].[" & _
fld.Name & "] ===> """ & fld.Value & """";
Exit Do
End If
Next fld
If rs.AbsolutePosition Mod 1000 = 999 Then
Debug.Print ".";
End If
rs.MoveNext
Loop
Debug.Print
rs.Close
Else
On Error GoTo 0
Debug.Print "Cannot open table [" & tdf.Name & "]"
End If
End If
Next tdf
db.Close
End Sub
这可以找到字段任何部分中包含的字符串。如果您只想查找整个字段,请将If fld.Value Like pattern Then
替换为If fld.Value = s Then
。