2009-05-13 5 views
0

액세스 데이터베이스에 일반 가져 오기 VBA 함수를 만들려고합니다. (비슷한 데이터베이스의 외부 테이블을 연결 한 다음 해당 데이터를 로컬 테이블로 가져옵니다.)테이블 관계 순서에 따라 데이터 가져 오기

먼저이 함수는 로컬 데이터베이스의 테이블 목록을 기본/외래 키로 정렬해야합니다 테이블 관계 규칙을 기반으로 가져 오기를 허용합니다.

따라서 다음과 유사한 작업을 수행하려고합니다. http://education.sqlfarms.com/education/ShowPost.aspx?PostID=50,하지만 액세스 VBA.

I 따라서 친절하게 도움을 삽입

(기본 키와 테이블이 관계에서 외래 키 상응하는보다 먼저 나열 될) 수 있도록하는 방식으로 주문, 로컬 테이블의 목록을하는 데 도움이 필요

+0

도움이 필요한 부분을 친절하게 식별하십시오. – BIBD

답변

0

다음은 대략적인 개요입니다.

Option Explicit 

Public i 

Sub GetTableOrder() 
Dim tdf As TableDef 
Dim db As Database 
Dim rs As New ADODB.Recordset 

Set db = CurrentDb 

''Create a disconnected recordset 
rs.Fields.Append "TableName", adVarChar, 50 
rs.Fields.Append "Level", adInteger 

rs.CursorType = adOpenStatic 
rs.Open 

For Each tdf In db.TableDefs 
    ''Skip system tables 
    If Left(tdf.Name, 4) <> "Msys" Then 
     rs.AddNew "TableName", tdf.Name 
     rs.Update 

     i = 0 
     RelRun tdf.Name, i 

     rs!Level = i 
     rs.Update 
    End If 
Next 

rs.MoveFirst 

''Delete order 
''ASC is the default sort order, so it is not 
''necessary, and only included for illustration. 

rs.Sort = "Level ASC" 

''Not a good place for this line 
''It is only here for convenience (mine :)) 
DelRecs rs 

End Sub 

Function RelRun(TableName, i) 
Dim rel As Relation 
Dim db As Database 
Dim blnFound As Boolean 
Dim TableForeign As String 

Set db = CurrentDb 

    For Each rel In db.Relations 

     If rel.Table = TableName Then 
      i = i + 1 
      TableForeign = rel.ForeignTable 
      blnFound = True 
     End If 

    Next 

    If blnFound Then 
     ''Round and round to the end of the line 
     RelRun TableForeign, i 
    End If 

End Function 

Sub DelRecs(rs As ADODB.Recordset) 
Dim strSQL As String 
Dim db As Database 

Set db = CurrentDb 

    Do While Not rs.EOF 
     strSQL = "DELETE FROM [" & rs!TableName & "]" 
     db.Execute strSQL 
     Debug.Print rs!TableName & " : " & db.RecordsAffected 
     rs.MoveNext 
    Loop 

End Sub 
관련 문제