1

私はMSAccess2010にDBを持っています。私はDBの作成者ではなく、この質問をするために彼に連絡する方法がありません。これは多くのテーブルとレコードを含む大きなデータベースであり、テーブルと列の名前は非常にわかりやすいものです。基本的に、特定のデータを格納しているテーブル/列を見つけようとしています。具体的には、データの値を知っています。例:データベースを使用するソフトウェアを使用して追加したばかりなので、「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 Thenフィールド全体のみを検索する場合は、 に置き換えIf fld.Value = s Thenます。

于 2012-05-02T19:32:35.527 に答える