Access (VBA)

Access VBAに関するフォーラムです。
  • 掲示板への投稿には会員登録(無料)が必要です。会員登録がまだの方はこちら
  • 掲示板ご利用上のお願い」に反するご記入はご遠慮ください。
  • Q&A掲示板の使い方はこちらをご覧ください
トピックに返信
質問

 
(Windows 7 Professional : Access 2007)
TransferText acImportDelim
投稿日時: 17/05/01 16:20:32
投稿者: 滝沢

csvファイルを指定してテーブルに「追加」する仕組みを作ったものがコレです。
DoCmd.TransferText acImportDelim, "ImportRule_Tab", "T_test", Me.txt_path1, True
 
今度は「追加」ではなく「差し替え」をしたいです。
削除クエリを入れれば良いかとも思いましたが、もっとスマートというか
本来ならみたいな方法はありますでしょうか?
 
よろしくお願い致します。

回答
投稿日時: 17/05/01 16:53:52
投稿者: sk

引用:
csvファイルを指定してテーブルに「追加」する仕組みを作ったものがコレです。
DoCmd.TransferText acImportDelim, "ImportRule_Tab", "T_test", Me.txt_path1, True

引用:
今度は「追加」ではなく「差し替え」をしたいです。

ここでの「差し替え」が、具体的にどのような操作を
示しているのかを明記されることをお奨めします。
 
・[T_test]の主キーはどのフィールドであるか。
 
・[T_test]と csv ファイルの主キー同士を突き合わせた結果、
 [T_test]に存在し、csv ファイルには存在しないレコードは
 どのように扱えばよいのか。
 
・逆に csv ファイルに存在し、[T_test]には存在しないレコードは
 どのように扱えばよいのか。
 
引用:
削除クエリを入れれば良いかとも思いましたが、

[T_test]に格納されている既存のレコードを
全て削除してしまっても特に支障はない(文字通りの「総入れ替え」)、
ということであればそれでも構わないでしょうけど、
例えば「削除クエリの実行」だけが成功して
その後の「 csv ファイルのインポート」に失敗してしまった場合、
結果として「空になった[T_test]」だけが残ることになります。
 
[T_test]がいわゆる一時テーブルではなくマスタテーブルであるならば、
( DAO や ADO によるトランザクション処理を用いるなどして)
そうなる可能性をあらかじめ潰しておいた方がよいでしょう。

投稿日時: 17/05/02 12:20:12
投稿者: 滝沢

sk様
コメントありがとうございます。
わかりづらくて申し訳ありません、「差し替え」とは、例えばテーブル作成クエリを実行し
テーブルができた後にもう一度同じテーブル作成クエリを実行すると「削除して改めて作る」という
動作をすると思いますが、それと同様の意味です。
(テーブルのリンクをする時に)
 
また、前回作業して残ってるデータと今から作業して作るデータはまるっきり無関係です。
csvファイルの構造(フィールド)は共通です。主キーはありません。
 
もしかすると、今やろうとしていることと
DoCmd.TransferText acImportDelim, "ImportRule_Tab", "T_test", Me.txt_path1, True
これは、あんまり関係なかったりしますかね?

回答
投稿日時: 17/05/02 13:11:41
投稿者: sk

引用:
「差し替え」とは、例えばテーブル作成クエリを実行し
テーブルができた後にもう一度同じテーブル作成クエリを実行すると
「削除して改めて作る」という動作をすると思いますが、それと同様の意味です。

引用:
また、前回作業して残ってるデータと今から作業して作るデータはまるっきり無関係です。
csvファイルの構造(フィールド)は共通です。主キーはありません。

ならば「[T_test]に格納されている全てのレコードを削除する削除クエリ」
を実行してから「 csv ファイルを[T_test]にインポートする処理」を
実行なされば充分だと思います。

トピックに返信