次の方法で共有

パススルークエリで取得したデータを編集したいです

Anonymous
2023-05-24T08:45:47+00:00

Accessでパススルークエリ(内容はoracleデータベースからSELECT文で抽出するものです。)を実行してデータの取得、編集を行おうとしました。

取得はできたのですが、パススルークエリで取得したデータは読み取り専用とのことが調べてわかりました。この後データを編集し、CSVに出力をする流れで考えているのですが、編集する方法は無いものでしょうか。

Access上でテーブルを事前に作成しておき、そこへレコードセットとしてINSERTするという方法があるようですが取得するテーブルが同じフィールドではなく動的に対応できたらと思います。このような方法はないのでしょうか。

初めての質問で拙いところもあると思いますがよろしくお願いします。

Microsoft 365 と Office | アクセス | ビジネス向け | Windows

ロックされた質問。 この質問は、Microsoft サポート コミュニティから移行されました。 役に立つかどうかに投票することはできますが、コメントの追加、質問への返信やフォローはできません。

0 件のコメント コメントはありません

質問作成者が受け入れた回答

Anonymous
2023-05-25T04:03:00+00:00

おっしゃっている通り、パススルークエリによって
取得された結果を直接編集することは出来ません。

バックエンド側のデータを直接改変せず、あくまで
「編集可能な一時データ」として取得したいのであれば、
そのクエリの結果を何らかの方法により、フロントエンド側の
編集可能なオブジェクトに複写することが必須となります。

> Access上でテーブルを事前に作成しておき、> そこへレコードセットとしてINSERTするという方法があるようですが

パススルークエリによって得られるレコードセットの構造
(列名、列数、データ型)が常に一定なのであれば、
上記の方法が最も堅実でしょう。

> 取得するテーブルが同じフィールドではなく動的に対応できたらと思います。

・パススルークエリの結果と同一構造の空のテーブルをその都度作成し、
 パススルークエリの全てのレコードを INSERT する。

・パススルークエリの結果と同一構造の空の ADODB.Recordset オブジェクトを
 生成し、パススルークエリのレコードを 1 件ずつ複写する形で AddNew する。

一応以上のような方法が挙げられます。

ただ問題となるのは以下の点。

> この後データを編集し、CSVに出力をする流れで考えている
「データを編集」というのは、具体的にどのような操作や処理を
意味しているのでしょうか。

例えば「パススルークエリ(の結果を複写したテーブル)を
レコードソースとするフォームを開き、ユーザーが自由に
任意のレコードを編集できるようにする」という場合、
レコードセットの構造が不定ならば、それをフォームに
連結させるのにもややこしい手順を踏むことになります。
(場合によっては連結させることが出来ない)

また、「ADODB.Recordset オブジェクトに複写する方式」を
採用する場合、Access の組み込み機能によるテキストファイルへの
エクスポート( DoCmd.TransferText メソッド)は使用できません。
ADODB.Stream オブジェクトを使用するなどした、独自の
ファイル出力プログラムを別途作成する必要があります。

この回答は役に立ちましたか?

1 人がこの回答が役に立ったと思いました。
0 件のコメント コメントはありません

2 件の追加の回答

並べ替え方法: 最も役に立つ
  1. Anonymous
    2023-05-25T12:25:24+00:00

    追記で失礼します。

    sk.exe様のご提案を元に検索していたところ、クエリをテーブルに変換するDoCmdのTransferDatabaseメソッドを使えば実現することがわかりました。

    これだとテーブル構造を考慮しなくて済み、無事に編集のできるテーブルへ変換できましたことをご報告致します。

    改めてご助言ありがとうございました。

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません
  2. Anonymous
    2023-05-25T07:58:52+00:00

    sk.exe 様

    ご返信ありがとうございます。非常に参考になりました。

    質問にあった「データの編集」とは、取得したテーブルに対して手入力でレコードの更新、追加、削除をする予定です。軽微な編集なのでフォームに連結ということは考えておりません。

    ですので2点ご提案頂いた中の

    > ・パススルークエリの結果と同一構造の空のテーブルをその都度作成し、 パススルークエリの全てのレコードを INSERT する。

    という方法で実装してみます!

    この回答は役に立ちましたか?

    0 件のコメント コメントはありません