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コレクションを照会することにより、オンザフライで 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して列に値を返すことができますが、そうであると想定しています。

于 2013-03-15T17:10:59.020 に答える