2009-05-13 8 views
0

アクセスデータベースに汎用のインポートVBA関数を作成しようとしています。 (同様のデータベースの外部テーブルをリンクして、ローカルテーブルにデータをインポートします)テーブルの関係順にデータをインポート

まず、ローカルデータベースのテーブルのリストをプライマリ/外部キー順に取得する必要がありますテーブル関係規則に基づいてインポートを可能にする。

したがって、私は次のような何かをしようとしています: http://education.sqlfarms.com/education/ShowPost.aspx?PostID=50しかし、アクセスVBAで。

私はので親切に助けを挿入

(主キーを持つテーブルは関係の外部キーに対応するとともに、それらの前にリストされる)ことを可能にするように命じ、ローカルテーブルのリストを取得する助けが必要

+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 
関連する問題