2009-05-13 2 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 
Смежные вопросы