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