アプリ版:「スタンプのみでお礼する」機能のリリースについて

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
にしてしまうと当然ながらテーブルが更新されてしまいます。
どのようにすれば、テーブルの更新内容を保存しないでファイル出力ができるのでしょうか

おわかりになる方がいらっしゃいましたら、ぜひ教えてください!
よろしくお願いいたします

A 回答 (4件)

方法は2つあると思います。


1.変更前の情報を保存しておいてdatファイル出力後に元に戻す
2.出力用のテーブルを別に作成し、それをdatファイルとして出力する

質問には書かれていませんが、datファイルに出力方法は、テーブルをエクスポートすると思ってよろしいのでしょうか?
もし、そうならばdatファイル出力用のクエリーを作成する方法もありかと。そうすれば元テーブルの内容を書き換える必要はなくなりますよ。 あっ、これで3パターン目ですね(^^)
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。

>datファイルに出力方法は、テーブルをエクスポートすると思ってよろしいのでしょうか?
はい テーブルをエクスポートします。

上記3パターン目の方法は気づきませんでした。
この方法で実行してみたいと思います。

無事解決できそうです。
ありがとうございました!!

お礼日時:2008/10/17 12:46

補足:もしかして・・・。



[イミディエイト]
? 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文
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

これが、今の構想の完結形かと思い出しました。
であれば、構想の最適化が課題だと思います。
    • good
    • 0
この回答へのお礼

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

おっしゃるとおりですね!!
ものすごく参考になりました。
どうもありがとうございます。

お礼日時:2008/10/17 12:39

質問の主旨が判りません。



・テーブルの列を更新するのであれば列は更新されてしかるべき。
・で、それを阻止する方法はないと思います。
・で、なぜ、ワザワザ、したくもない列の更新するのでしょうか?

tab1:

ID__担当者
1___鈴木
2___中村

[イミディエイト]
? DBSelect("SELECT ID, '田中' AS 担当者 FROM tab1", ",", vbCRLf)
1,田中
2,田中

これは、イミディエイトウィンドウでのSELECT文の実行結果です。
便宜的に判りやすいようにDBSelect関数を使っていますが、これはAccessにはありません。
で、ともかく、このように、Select文で列[担当者]は生成できます。
で、「これではダメなのかなー」というのが先の回答です。
    • good
    • 0

SELECT Replace(列名, "変換したい文字", "変換する文字") AS 列名 FROM テーブル名



と、すべき点を間違っているということでしょうか?
しかし、レコード数と列数に応じて出力データを作成するには相当な改良が必要ですね。
    • good
    • 0
この回答へのお礼

お返事ありがとうございます。
自分の説明が足らず、しかもわかりづらくて申し訳ございません。

私が質問したい内容は、

フォーム上にある【ファイル出力ボタン】が押された際に、コマンドボタンに設定されたクリックイベントでファイル出力の処理を行う前に、あるテーブルの担当者の名前をすべて自分の名前(田中)に変更するという処理が実行されるとします。
このときに、LOOP等を使った繰り返し処理の中で

rs.edit
rs!担当者 = "田中"
rs.update

のように記述して処理を行いますと、
担当者の名前が"田中"に更新されます。
この更新されたテーブルの情報がファイル出力されるときに、
出力ファイルの担当者の値は"田中"ですが、
データベース内のテーブルでは、担当者の名前を"田中"に
更新しないで、もとのままにしておきたいのです。

要するに、
ファイル出力ボタンを押しファイル出力を行う際に、ファイル出力ボタンが押されたときのクリックイベントでテーブルのある列の値を変換しますが、
出力ファイルを保存し、処理が終了したときにはテーブルの情報は何一つ更新しないでそのままに保ち、
出力ファイルには変更された内容を保存しておく

という処理を行いたいのですが、つまずいています。

お礼日時:2008/10/16 21:49

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!