使いやすいように設計された Microsoft リレーショナル データベース管理システムのファミリ。
おっしゃっている通り、パススルークエリによって
取得された結果を直接編集することは出来ません。
バックエンド側のデータを直接改変せず、あくまで
「編集可能な一時データ」として取得したいのであれば、
そのクエリの結果を何らかの方法により、フロントエンド側の
編集可能なオブジェクトに複写することが必須となります。
> Access上でテーブルを事前に作成しておき、> そこへレコードセットとしてINSERTするという方法があるようですが
パススルークエリによって得られるレコードセットの構造
(列名、列数、データ型)が常に一定なのであれば、
上記の方法が最も堅実でしょう。
> 取得するテーブルが同じフィールドではなく動的に対応できたらと思います。
・パススルークエリの結果と同一構造の空のテーブルをその都度作成し、
パススルークエリの全てのレコードを INSERT する。
・パススルークエリの結果と同一構造の空の ADODB.Recordset オブジェクトを
生成し、パススルークエリのレコードを 1 件ずつ複写する形で AddNew する。
一応以上のような方法が挙げられます。
ただ問題となるのは以下の点。
> この後データを編集し、CSVに出力をする流れで考えている
「データを編集」というのは、具体的にどのような操作や処理を
意味しているのでしょうか。
例えば「パススルークエリ(の結果を複写したテーブル)を
レコードソースとするフォームを開き、ユーザーが自由に
任意のレコードを編集できるようにする」という場合、
レコードセットの構造が不定ならば、それをフォームに
連結させるのにもややこしい手順を踏むことになります。
(場合によっては連結させることが出来ない)
また、「ADODB.Recordset オブジェクトに複写する方式」を
採用する場合、Access の組み込み機能によるテキストファイルへの
エクスポート( DoCmd.TransferText メソッド)は使用できません。
ADODB.Stream オブジェクトを使用するなどした、独自の
ファイル出力プログラムを別途作成する必要があります。