Access (VBA)

Access VBAに関するフォーラムです。
  • 解決済みのトピックにはコメントできません。
このトピックは解決済みです。
質問

 
(Windows 7全般 : Access 2007)
リンクテーブルをローカルテーブルとしてコピーする方法
投稿日時: 17/09/06 05:59:33
投稿者: tomachan

よろしくお願いします。
  
ファイルAのコマンドを使って
ファイルAのリンクテーブルTをファイルBにローカルテーブルTとしてコピーしたいのですが
DoCmd.TransferDatebaseを使ってエクスポートすると、ファイルBにリンクテーブルTとしてコピーされてしまいます。
既存システムの中にリンクテーブル→ローカルテーブルとなるVBAがあるので、この記述を流用して書いているのですが、どうもローカルテーブルになってくれません。
  
何かコツと言うかちょっとした工夫が必要でしょうか。

回答
投稿日時: 17/09/06 10:14:59
投稿者: Suzu

こんにちは。
 

tomachan さんの引用:
ファイルAのコマンドを使って
ファイルAのリンクテーブルTをファイルBにローカルテーブルTとしてコピーしたいのですが
DoCmd.TransferDatebaseを使ってエクスポートすると、ファイルBにリンクテーブルTとしてコピーされてしまいます。

 
規定の動作です。リンクテーブルを指定してエクスポートしても、リンクテーブルのままエクスポートされます。
 
 
tomachan さんの引用:
既存システムの中にリンクテーブル→ローカルテーブルとなるVBAがあるので、この記述を流用して書いている

 
具体的にどのような処理を行っているのでしょう?
 
 
 
方法としては2つ。
 
1.テーブルBにテーブルを予め用意しておいて、追加クエリにて追加する
  必要に応じて、削除クエリと追加クエリの組み合わせ にて レコードを同期させる。
  【テーブルの構造変更は無い】
 
   普通はこれで充分です。
 
 
2.リンクテーブルのリンク元となるテーブルを指定して エクスポート/インポート
 
  ファイルA のリンクテーブルのソースとなるテーブルを持つファイルを 【ファイル0】とした時
   1) ファイル0をオートメーションにて開き、対象テーブルを TransferDatabase を使い
      ファイルB にエクスポート
   2) ファイルBをオートメーションにて開き、ファイル0の対象テーブルを TransferDatabase を使い
      ファイルB にインポート
 
     1)または 2) の方法を使います。
  【テーブルの構造変更がある】
 
通常は、1 で良いはずです。
テスト段階で 2 を使用するなら判りますが、運用において 2 を使わなければならないなら
テーブル構造変更 が 定常的に行われているという事でしょう。
 
Accessを運用していると、ファイルが破損して開けなくなる事があります。
テーブルを含むオブジェクトの構造変更は、その最たる原因と思っています。
それを運用の中で行う事は止めるべきでしょう。

回答
投稿日時: 17/09/06 14:29:48
投稿者: NoLookUp

「ローカルテーブルに変換(V)」相当の
DoCmd.RunCommand acCmdConvertLinkedTableToLocal
を利用するとかでしょうか。
 
(2007でサポートされてなかったら ごめんなさい)

投稿日時: 17/09/13 21:26:45
投稿者: tomachan

Suzu様
 
アドバイスいただきありがとうございます。
流用元のVBAをよく調べたところ、
ファイルA内で一時的にローカルテーブルとして変換させたテーブルをファイルBにTransferしていました。
変換させるについては、RunSQLにて行っています。
その後に一時ファイルを削除しています。
お陰様で初期の目的は遂げることができました。感謝申し上げます。
引き続き勉強します。
 
 
NoLookUp様
 
ご指南いただきましたコマンドをうまく活用できませんでした。
でもこれができれば一発で変換できるわけですから、
もうすこし調べてみます。
アドバイスありがとうございました。