2012-05-02 2 views
1

MS Access 2010에 DB가 있습니다. DB 작성자가 아니기 때문에이 질문을 할 수있는 방법이 없습니다. 그것은 많은 테이블과 레코드가있는 큰 데이터베이스이고, 테이블과 컬럼의 이름은 매우 설명 적이 지 않습니다. 기본적으로 특정 테이블/열에 특정 데이터가 저장되어 있는지 확인하려고하는데 특히 데이터 값을 알고 있습니다. 예를 들면 : 데이터베이스를 사용하는 소프트웨어를 사용하여 방금 추가했기 때문에 'ABCDEF'라는 고객이 있다는 것을 알고 있습니다. 이제이 고객 데이터를 저장하는 테이블이 무엇인지 알아야합니다.테이블 또는 열을 모른 채 DB에서 텍스트를 찾으십니까?

전혀 가능합니까? 테이블별로 테이블을 이동하고, 레코드별로 레코드를 만들고, 전체 데이터베이스의 필드별로 필드를 비교하고이를 내 문자열과 비교하는 방법은 무엇입니까?

답변

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으로 바꾸십시오.

+0

바로 가기 창에서 실행하려고하면 "런타임 오류 '3167': 레코드가 삭제됩니다." – Antrim

+0

이상한. 그것은 내 DB에서 발생하지 않습니다. 다른 사람이 같은 DB에서 동시에 작업하고 있습니까? 오류 처리를 추가하십시오 ('On Error Resume Next' 등). –

+0

두 메서드를 시도하고 두 "Run-time error '3167': 레코드가 삭제됩니다." 어떤 생각이 잘못된거야? – Antrim

관련 문제