Microsoft Access ClubAccess超初心者対象ForumAccess初級者対象ForumAccess初・中級者対象ForumAccess VBA Tips ForumDAO、ADO、SQL Forum

     

No5191.複数外部MDBファイルのテーブルデータインポート追加について

タイトル複数外部MDBファイルのテーブルデータインポート追加について
記事No: 5191
投稿日: 2002/02/08(Fri) 16:13
投稿者: seki
こんにちは。複数外部MDBファイルのテーブルインポート追加処理についての質問です。
一個のMDBファイルからテーブルをインポートする事は出来るのですが、複数MDBファイルから同じ名前のテーブルにデータをインポートしようとすると、別のテーブルが作成されてしまいます。

同じインポート先でデータを追加する事はできるのでしょうか?
どなたかよろしくお願いします!!

言葉で説明するとわかりにくいので下記も参照おねがいします。

処理@ A.MDBよりテーブル1のデータを総合データテーブルへインポート
            ↓
処理A B.MDBよりテーブル2のデータを総合データテーブルへインポート
            ↓
    結果:総合データテーブルと総合データテーブル1とゆうテーブルが
       作成されてしまう。
       総合データテーブルに2つのMDBファイルからのデータを追加したい。

コードは下記のとおりです。

'データの取り込み
On Error Resume Next
'既存の同じテーブルを削除します
DoCmd.DeleteObject acTable, "総合データテーブル"
On Error GoTo 0

'テーブルをインポートします
'総合データテーブルにA.MDBのテーブル1データを登録
DoCmd.TransferDatabase acImport, "Microsoft Access", _
"A.MDB", acTable, _
"テーブル1", "総合データテーブル", False

'総合データテーブルにB.MDBのテーブル2データを登録
DoCmd.TransferDatabase acImport, "Microsoft Access", _
"B.MDB", acTable, _
"テーブル2", "総合データテーブル", False

タイトルワークテーブルを使うようにするとか
記事No: 5210
投稿日: 2002/02/09(Sat) 11:21
投稿者: hide
> 複数MDBファイルから同じ名前のテーブルにデータをインポート
> しようとすると、別のテーブルが作成されてしまいます。

それはインポート先で同じ名前のテーブル(オブジェクト)名が
ある場合は,Accessが別名として保存してくれるからです。

> 同じインポート先でデータを追加する事はできるのでしょうか?

提示されていたコードを見ましたが、このやり方でやると別名保存
されたテーブルが存在しちゃうから扱いが面倒ですよね。


じゃあどうするかと言うと、私ならインポート用のワークテーブル
と総合データテーブルに分けて、インポートしたらワークテーブルから
総合データテーブルにデータを追加する仕組みにしてやります。


もう少し具体的に手順を言うと、
 1)総合データテーブルのデータを最初の1回だけクリアー
   (あらかじめインポート先のmdbに総合データテーブルの定義を
    作っておく)
 2)インポート先のmdbにワークテーブルが存在するかチェックし、
   存在したらテーブル(オブジェクト)の削除を実施
 3)外部のmdbからインポートしたいテーブルを、インポート先の
   mdbにインポート
 4)ワークテーブルから総合データテーブルにデータを入れる

 ※ 外部のmdbがいくつあるかわかりませんが、ある分だけ2)〜4)を
  繰り返す。


<サンプル>

Dim obj As AccessObject, StrSQL As String

(これはデータを貯め込むので最初の1回だけ実施)

'総合データテーブルのデータのみをクリアー
CurrentDb.Execute "DELETE * FROM 総合データテーブル;"


(以下はインポートする分だけやる)

'ワークテーブルが存在してたらオブジェクトごと削除
For Each obj In CurrentData.AllTables
  If (obj.Name = "ワークテーブル") Then
    DoCmd.DeleteObject acTable, obj.Name
    Exit For
  End If
Next

'ワークテーブルにインポート
DoCmd.TransferDatabase acImport, "Microsoft Access", _
  "c:\xxx\A.MDB", acTable, "テーブル1", "ワークテーブル", False

'ワークテーブルから総合データテーブルにデータを入れる
StrSQL = "INSERT INTO 総合データテーブル SELECT ワークテーブル.* FROM ワークテーブル;"
CurrentDb.Execute StrSQL

タイトルRe: 別案
記事No: 5228
投稿日: 2002/02/09(Sat) 22:37
投稿者: YU-TANG
参照先http://www.f3.dion.ne.jp/~element/msaccess/
Dim strSQL As String
CurrentDb.Execute "DELETE FROM 総合データテーブル;"
strSQL = "INSERT INTO 総合データテーブル SELECT * FROM "
CurrentDb.Execute StrSQL & "テーブル1 IN 'C:\A.mdb';"
CurrentDb.Execute StrSQL & "テーブル2 IN 'C:\B.mdb';"

タイトルこれでいんですね
記事No: 5230
投稿日: 2002/02/09(Sat) 23:34
投稿者: hide
そうか直接mdbから INSERT INTO をそれぞれやってあげるだけ
ですよね。

別案じゃなくて、これが正解です。(素晴らしい!)

# 最近頭が固くなってきちゃったかな

タイトルRe: これでいんですね
記事No: 5279
投稿日: 2002/02/12(Tue) 11:13
投稿者: seki
YU−TANGさん、hideさん、有難うございます!
いろいろとやり方があるもんだなぁと感動してしまいました!!
おかげさまで希望どおりの動作をしております。
助かりました〜。まじでどうもでした。


このAccessフォーラム過去ログ集は、Microsoft Access Club が運営しています

PLESKコンパネ管理者用の操作手順情報を発信しています。
Parallels社PLESKコンパネ管理者用の操作手順情報を発信中・・・。

 

ページの先頭へ 前ページへ戻る