1

我在 MS Access 2010 中有一个数据库。我不是数据库的创建者,也无法联系他问这个问题。这是一个包含许多表和记录的大型数据库,并且表和列的名称非常不具描述性。基本上,我试图找出哪个表/列存储了某些数据,并且我特别知道数据的值。例如:我知道有一个客户名为“ABCDEF”,因为我只是使用使用数据库的软件添加了它。现在,我需要知道存储此客户数据的表是什么。

这可能吗?一种逐个表,逐个记录,逐个字段的整个数据库并将其与我的字符串进行比较的方法?

4

1 回答 1

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 ThenIf fld.Value = s Then.

于 2012-05-02T19:32:35.527 回答