我正在寻找一种方法将记录从一个表有效地添加到另一个表。表格类似,但不同。假设我正在尝试将Employee表B中的所有数据附加到Employee表A中。
Employee Table B
---------------
EmpID (int), fname (text), lname(text)
1 Bob Dole
我希望将此数据附加到
Employee Table A
empid (int) fname(text) lname(text) DateOfBirth (DateTime)
作为
1 Bob Dole null / blank
我必须为大约30多个表做这个,我正在寻找一个快速的方法来做到这一点。
我想使用Access的某些导入功能来节省时间,而不是编写INSERT INTO table_a(empid, fname, lname) SELECT empid, fname,lname FROM table_b
。我尝试将每个表转储到excel并附加到必要的表,但我得到了Subscript out of range error
。我也试过复制粘贴记录无济于事。
是否有Access提供的工具可以省去为每个表编写追加查询的麻烦?
答案 0 :(得分:1)
如果两个表中的字段名称相同(缺少的字段除外),您可以编写一些代码来为您完成。使用TableDefs
(http://msdn.microsoft.com/en-us/library/office/bb220949(v=office.12).aspx)对象循环遍历表并查找要附加的“_a”表,并通过查询TableDef的.Fields
集合即时创建INSERT语句。
例如,这样的事情应该有用(未经测试,手工编写!):
Dim dbs As DAO.Database
Dim tdfLoop As TableDef
Dim strSql As String
Dim i as Integer
Dim strSourceTable as String
Dim strFieldList as String
Set dbs = CurrentDb
With dbs
For Each tdfLoop In .TableDefs
If Right(tdfLoop.Name, 2) = "_a" Then
strSourceTable = Mid(tdfLoop.Name, 1, Len(tdfLoop.Name)-2) & "_b"
strSql = "INSERT INTO " & tdfLoop.Name & "("
strFieldList = ""
For i = 0 To tdfLoop.Fields.Count - 1
strFieldList = strFieldList & tdfLoop.Fields(i).Name & ","
Next i
If strFieldList <> "" Then
strFieldList = Mid(strFieldList, 1, Len(strFieldList) - 2)
End If
strSql = strSql & strFieldList & ") SELECT " & strFieldList & " FROM " & strSourceTable
dbs.Execute(strSql)
End If
Next tdfLoop
End With
dbs.Close
Set dbs = Nothing
如果“缺少字段”没有在表格中定义默认值,那么您可以修改上述内容以在其列中返回NULL
值,但我认为它们已经存在。