Ms access 根据表关系顺序导入数据

Ms access 根据表关系顺序导入数据,ms-access,import,Ms Access,Import,我正在尝试在access数据库中创建一个通用的导入VBA函数。(我将链接类似数据库的外部表,然后将它们的数据导入本地表。) 对于初学者,函数应该获得本地数据库中表的列表,按主键/外键排序,以便允许基于表关系规则导入 因此,我尝试做一些类似于以下的事情: ,但在access VBA中 因此,我需要帮助获取本地表的列表,以允许插入的方式排序(在关系中具有相应外键的表之前列出具有主键的表) 请帮忙这是一个大概的提纲,可能会有所帮助 Option Explicit Public i Sub GetT

我正在尝试在access数据库中创建一个通用的导入VBA函数。(我将链接类似数据库的外部表,然后将它们的数据导入本地表。)

对于初学者,函数应该获得本地数据库中表的列表,按主键/外键排序,以便允许基于表关系规则导入

因此,我尝试做一些类似于以下的事情: ,但在access VBA中

因此,我需要帮助获取本地表的列表,以允许插入的方式排序(在关系中具有相应外键的表之前列出具有主键的表)


请帮忙

这是一个大概的提纲,可能会有所帮助

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
选项显式
公共i
子GetTableOrder()
将tdf调暗为TableDef
dimdb作为数据库
将rs设置为新ADODB.Recordset
Set db=CurrentDb
''创建一个断开连接的记录集
rs.Fields.Append“TableName”,adVarChar,50
rs.Fields.Append“Level”,adInteger
rs.CursorType=adOpenStatic
美国公开赛
对于以db.TableDefs为单位的每个tdf
''跳过系统表
如果左(tdf.Name,4)“Msys”,则
rs.AddNew“TableName”,tdf.Name
rs.更新
i=0
重新运行tdf.Name,i
rs!一级
rs.更新
如果结束
下一个
先走一步
''删除订单
''ASC是默认的排序顺序,因此不是
“必要的,仅包括用于说明。
rs.Sort=“ASC级”
“这不是一个好地方
“这里只是为了方便(我的:)”
德雷克斯
端接头
函数RelRun(TableName,i)
模糊关系
dimdb作为数据库
Dim blnFound作为布尔值
像绳子一样模糊的桌子
Set db=CurrentDb
对于数据库关系中的每个关系
如果rel.Table=TableName,则
i=i+1
TableForeign=rel.ForeignTable
blnFound=True
如果结束
下一个
如果找到了,那么
“一圈又一圈到队伍的尽头
我是外国人
如果结束
端函数
子数据集(作为ADODB.Recordset的R)
作为字符串的Dim strSQL
dimdb作为数据库
Set db=CurrentDb
做而不做
strSQL=“从[”&rs!TableName&“]删除”
执行strSQL
调试。打印rs!TableName&“:”&db.RecordsAffected
下一个
环
端接头

请确定您需要帮助的部件。