在DB中查找文本而不知道哪个表或列?

时间:2012-05-02 19:13:39

标签: database ms-access full-text-search

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

这有可能吗?一种逐表的方式,按记录记录,逐个字段的字段,并将其与我的字符串进行比较?

1 个答案:

答案 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