質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.47%
Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

Q&A

解決済

1回答

342閲覧

Access 「パススルークエリまたは非固定列のクロス集計クエリを、サブフォームまたはサブレポートのレコードソースとして使うことはできません。」のエラー解消について

syuu07

総合スコア11

Access

Accessはマイクロソフトによるリレーショナルデータベース管理システムです。オブジェクト指向のアプリケーション作成に対応しており、テーブルや編集をはじめ、クエリ生成、入力フォーム作成、レポート作成など一通りの機能を備えています。

0グッド

0クリップ

投稿2024/03/22 02:23

実現したいこと

パススルークエリを使ったクエリをサブフォームとして主フォームに入れてリンク親フィールドとリンク子フィールドを入力しようとしたいのですがエラーが発生してしまい連結できない状況です。
主フォームにある見積IDと連結することで該当する項目のみフォームに表示させたいのですがどのように変更すれば見積IDと連結させたパススルークエリのみの内容をレポートに表示させれるでしょうか?
初心者で申し訳ございませんが、ご教授の方よろしくお願いします。

発生している問題・分からないこと

主フォームは見積一覧を表示させたいです。
主フォームにある見積番号を表示させその見積番号に該当する各費用のレコードを表示、最後にその合計値を表示させたいです。
各費用の合計は表示でき、リンク親フィールドとリンク子フィールドを入力することで該当するレコードを表示させることはできましたが、各費用の合計を表示させたクエリだけは連結できません。

該当のソースコード

サブフォーム フィールド リンク ビルダーを押した際のエラーコード 「アプリケーション定義またはオブジェクト定義のエラーです」 直接レコードに入力した際のエラーコード 「パススルークエリまたは非固定列のクロス集計クエリを、サブフォームまたはサブレポートのレコードソースとして使うことはできません。サブフォームまたはサブレポートをクロス集計表クエリと連結する前に、クエリの"ColumnHeadings/クロス列見出し"プロパティを設定してください」

試したこと・調べたこと

  • teratailやGoogle等で検索した
  • ソースコードを自分なりに変更した
  • 知人に聞いた
  • その他
上記の詳細・結果

パススルークエリを使いたいのはラグが発生せずすぐにデータを表示できるからです。合計値そのものを入力したいわけではないのですが、計算は自動でしてほしいです。

・パススルークエリを使わずaccessで直接クエリを作りサブフォームとして実行
→実行自体はできるのですがラグが長く実用的ではないです。

・主のレポートを構成しているQ_見積をパススルークエリにする
→見積自体の新規作成ができなくなるためパススルークエリにすることができません。

・パススルークエリをクエリオブジェクトとしてACCESSに登録し、accessのクエリとして実行
→変化なし

・accessのテーブルを作り、その中に各費用の合計値を入力した内容を入れそれをサブフォームとして入れる
→テーブルに値を入れるだけなので、費用の数値が変わった際に更新されない

補足

Microsoft Access 2021(.accdb)

・Accessのデータ自体はSQLサーバーである SQL Server 2022 express にて保存。Accessとリンク済み

接続先(別のPC側)
・リモートデスクトップ接続にて操作している
・SQL Server Management Studio 19
・SQL Server 2022 express
SQL Server 認証にて接続
・Windows Server 2022 Standard
・名前付きインスタンス

レポート 見積(主 見積番号)
Q_見積加工,Q_見積材料,Q_見積初期費用,Q_見積運賃(主キー 見積加工(Q_の後ろ)ID 見積番号)

各費用の合計を求める式は以下の通り

IIf((((SELECT Sum(Q_見積加工.金額) FROM Q_見積加工 WHERE 見積番号=見積.見積番号)Is Null)),0,(SELECT Sum(Q_見積加工.金額) FROM Q_見積加工 WHERE 見積番号=見積.見積番号)) AS 加工費合計

加工費であれば、Q_見積加工にある見積番号と見積にある見積番号が一致する見積番号の金額をQ_見積加工から求める

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

logres_Fan

2024/03/22 03:15

テーブル設計の妥当性を意見募集したほうがいいのでは?泥舟の上に質問を乱立しても、難しいんじゃないでしょうか?
syuu07

2024/03/22 07:23

コメントありがとうございます。 次回からの質問の際に気を付けたいと思います。
guest

回答1

0

ベストアンサー

照会するカラム及び一意キーが確定できない事による、エラーでしょう。

回避方法としては、パススルークエリーを元にワークテーブルを作成し、そのワークテーブルを参照するようにすることが考えられますが、元々性能重視ということもあるようですので、現状のフォームを照会用として、非連結の更新用フォームを追加という構成にする方が良い気がします。

※更新用フォームではパススルーによりDBを直接更新。
※試していませんが、フォームのプロパティ:レコードセットを「ダイナセット (矛盾を許す)」にしてみるとエラーが回避されるかもしれません。

#初心者マークを付けた人には敷居が高い対応をされているように思います。

投稿2024/03/22 04:09

編集2024/03/22 06:15
sazi

総合スコア25195

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

syuu07

2024/03/22 07:19

ご回答ありがとうございます。 パススルークエリをサブフォームとして入れることが不可能ですので、 ・主フォームをパススルークエリにし、すべての項目を入れた閲覧専用のフォーム ・パススルークエリ以外の入力ができる更新フォーム このように分けるという解釈で間違いないでしょうか? 「ダイナセット (矛盾を許す)」に関しては特に変化はありませんでした。
sazi

2024/03/22 07:53

パススルークエリーでは照会は出来ているという事から、更新は分けて考えるという事で相違ありません。
syuu07

2024/03/22 08:05

ご回答ありがとうございます。 分けて作成してみたいと思います。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.47%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問