0

我正在寻找一种有效地将记录从一个表添加到另一个表的方法。这些表相似,但不同。假设我正在尝试将 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 多张桌子执行此操作,并且正在寻找一种快速的方法来执行此操作。

而不是写一个INSERT INTO table_a(empid, fname, lname) SELECT empid, fname,lname FROM table_b,我想使用一些 Access 的导入功能来节省时间。我尝试将每个表转储为 excel 并附加到必要的表中,但我得到了一个Subscript out of range error. 我也尝试复制粘贴记录无济于事。

是否有 Access 提供的工具可以省去为每个表编写附加查询的麻烦?

4

1 回答 1

1

如果两个表中的字段名称相同(缺少的除外),您可以编写一些代码来为您完成。使用TableDefs( http://msdn.microsoft.com/en-us/library/office/bb220949(v=office.12).aspx ) 对象循环遍历表并查找要附加到的“_a”表并创建通过查询 TableDef 的.Fields集合即时插入语句。

例如,这样的东西应该可以工作(未经测试,手写!):

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在其列中返回值,但我假设它们有。

于 2013-03-15T17:10:59.020 回答