• ベストアンサー

VBA ACCESS ファイル出力時に更新内容を保存しないで出力したい

VBA ACCESSの質問です はじめまして 最近になりVBAをはじめたものです。 下記の点について調べてもわからないことがあり非常に困っております。 フォーム上にファイル出力をするコマンドボタンがあります。 これをクリックすると拡張子がdatのファイルで出力されるのですが、 【テーブルの値を一部変更した際に、  更新内容を保存しないでファイル出力をする】 という処理のコードはどのようにすればよろしいでしょうか? ↓↓例えば↓↓ Dim rs As DAO.Recordset Set rs = CurrentDb.OpenRecordset("SELECT 列名 FROM テーブル名)", dbOpenDynaset Do Until rs.EOF rs.Edit rs!列名 = Replace(rs!列名, "変換したい文字", "変換する文字") rs.Update Loop rs.MoveNext rs.Close Set rs = Nothing 上記コードの6行目を rs.update にしてしまうと当然ながらテーブルが更新されてしまいます。 どのようにすれば、テーブルの更新内容を保存しないでファイル出力ができるのでしょうか おわかりになる方がいらっしゃいましたら、ぜひ教えてください! よろしくお願いいたします

質問者が選んだベストアンサー

  • ベストアンサー
回答No.2

方法は2つあると思います。 1.変更前の情報を保存しておいてdatファイル出力後に元に戻す 2.出力用のテーブルを別に作成し、それをdatファイルとして出力する 質問には書かれていませんが、datファイルに出力方法は、テーブルをエクスポートすると思ってよろしいのでしょうか? もし、そうならばdatファイル出力用のクエリーを作成する方法もありかと。そうすれば元テーブルの内容を書き換える必要はなくなりますよ。 あっ、これで3パターン目ですね(^^)

ko0
質問者

お礼

お返事ありがとうございます。 >datファイルに出力方法は、テーブルをエクスポートすると思ってよろしいのでしょうか? はい テーブルをエクスポートします。 上記3パターン目の方法は気づきませんでした。 この方法で実行してみたいと思います。 無事解決できそうです。 ありがとうございました!!

その他の回答 (3)

noname#140971
noname#140971
回答No.4

補足:もしかして・・・。 [イミディエイト] ? FileWrite("C:\Temp\Test.dat", DBSelect("SELECT ID, '田中' AS 担当者 FROM tab1", ",", vbCRLf)) True ---------------------------------- Test.dat-メモ帳 ---------------------------------- 1,田中 2,田中 これは、先のSelect文の実行結果を"C:\Temp\Test.dat"に出力しメモ帳で開いた様子です。 もしかすると、一旦、テーブルを加工してからAccessの出力機能を使ってという手法でしょうか? だとすると納得のいくことですが・・・。 私自身は、Access のそのような機能は使ったことがありません。 FileSystemObject、ADO等しか使ったことがありません。 ですから、ちょっとイメージ出来ませんでした。 そういう意味では<質問の主旨が判りません>は経験不足のなせるワザ。 少し、謝っておきます。 ただ、先のSELECT文をクエリ化すれば、それを出力するということは可能ではありませんか? 多分、可能な筈ですね。 INSERT INTO 文=>UPDATE文=>DELETE文 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ これが、今の構想の完結形かと思い出しました。 であれば、構想の最適化が課題だと思います。

ko0
質問者

お礼

いつもお世話になっております。 >もしかすると、一旦、テーブルを加工してからAccessの出力機能を使ってという手法でしょうか? 今回はACCESSの出力機能を使っての手法です。 >ただ、先のSELECT文をクエリ化すれば、それを出力するということは可能ではありませんか? おっしゃるとおりですね!! ものすごく参考になりました。 どうもありがとうございます。

noname#140971
noname#140971
回答No.3

質問の主旨が判りません。 ・テーブルの列を更新するのであれば列は更新されてしかるべき。 ・で、それを阻止する方法はないと思います。 ・で、なぜ、ワザワザ、したくもない列の更新するのでしょうか? tab1: ID__担当者 1___鈴木 2___中村 [イミディエイト] ? DBSelect("SELECT ID, '田中' AS 担当者 FROM tab1", ",", vbCRLf) 1,田中 2,田中 これは、イミディエイトウィンドウでのSELECT文の実行結果です。 便宜的に判りやすいようにDBSelect関数を使っていますが、これはAccessにはありません。 で、ともかく、このように、Select文で列[担当者]は生成できます。 で、「これではダメなのかなー」というのが先の回答です。

noname#140971
noname#140971
回答No.1

SELECT Replace(列名, "変換したい文字", "変換する文字") AS 列名 FROM テーブル名 と、すべき点を間違っているということでしょうか? しかし、レコード数と列数に応じて出力データを作成するには相当な改良が必要ですね。

ko0
質問者

お礼

お返事ありがとうございます。 自分の説明が足らず、しかもわかりづらくて申し訳ございません。 私が質問したい内容は、 フォーム上にある【ファイル出力ボタン】が押された際に、コマンドボタンに設定されたクリックイベントでファイル出力の処理を行う前に、あるテーブルの担当者の名前をすべて自分の名前(田中)に変更するという処理が実行されるとします。 このときに、LOOP等を使った繰り返し処理の中で rs.edit rs!担当者 = "田中" rs.update のように記述して処理を行いますと、 担当者の名前が"田中"に更新されます。 この更新されたテーブルの情報がファイル出力されるときに、 出力ファイルの担当者の値は"田中"ですが、 データベース内のテーブルでは、担当者の名前を"田中"に 更新しないで、もとのままにしておきたいのです。 要するに、 ファイル出力ボタンを押しファイル出力を行う際に、ファイル出力ボタンが押されたときのクリックイベントでテーブルのある列の値を変換しますが、 出力ファイルを保存し、処理が終了したときにはテーブルの情報は何一つ更新しないでそのままに保ち、 出力ファイルには変更された内容を保存しておく という処理を行いたいのですが、つまずいています。

関連するQ&A

専門家に質問してみよう