我在 MS Access 2010 中有一个数据库。我不是数据库的创建者,也无法联系他问这个问题。这是一个包含许多表和记录的大型数据库,并且表和列的名称非常不具描述性。基本上,我试图找出哪个表/列存储了某些数据,并且我特别知道数据的值。例如:我知道有一个客户名为“ABCDEF”,因为我只是使用使用数据库的软件添加了它。现在,我需要知道存储此客户数据的表是什么。
这可能吗?一种逐个表,逐个记录,逐个字段的整个数据库并将其与我的字符串进行比较的方法?
我在 MS Access 2010 中有一个数据库。我不是数据库的创建者,也无法联系他问这个问题。这是一个包含许多表和记录的大型数据库,并且表和列的名称非常不具描述性。基本上,我试图找出哪个表/列存储了某些数据,并且我特别知道数据的值。例如:我知道有一个客户名为“ABCDEF”,因为我只是使用使用数据库的软件添加了它。现在,我需要知道存储此客户数据的表是什么。
这可能吗?一种逐个表,逐个记录,逐个字段的整个数据库并将其与我的字符串进行比较的方法?
试试这个
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
.