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

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

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

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

Q&A

解決済

1回答

998閲覧

Microsoft AccessのサブフォームでSELECT文で指定した項目のみを出力したい

keisuke8

総合スコア2

Access

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

SQL

SQL(Structured Query Language)は、リレーショナルデータベース管理システム (RDBMS)のデータベース言語です。大きく分けて、データ定義言語(DDL)、データ操作言語(DML)、データ制御言語(DCL)の3つで構成されており、プログラム上でSQL文を生成して、RDBMSに命令を出し、RDBに必要なデータを格納できます。また、格納したデータを引き出すことも可能です。

0グッド

1クリップ

投稿2024/02/21 07:17

編集2024/02/21 07:31

実現したいこと

Access VBAで記述したSQLのSELECT文で指定した項目のみ、サブフォームへ検索結果を出力したいです。

ちなみに、フォームヘッダーに配置した検索ボタンを押すと最終的に「該当のソースコード」が走るようにしております。

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

現状、検索結果はサブフォームのソースオブジェクト(クエリを指定してます)で「表示」と設定した項目が固定となってしまいます。

例えば、クエリで「表示」としているのがA, B, C項目 VBAで作成したSQLが SELECT A, B FROM ~
とすると、検索結果の項目名はA, B, Cで固定され、SELECT文で指定していない項目Cは
すべて空欄で表示されます。

実現したいことは、検索結果の項目名をA, Bのみにすることです。

※チェックボックスA, Bを選択したら、SELECT A, B ~ の文字列を生成するように実装済みです。
同様にA, Cを選択したら、検索結果に項目A, Cだけを表示するようにしたいです。

該当のソースコード

SQL

1strSQL = 【生成したSQL文】 2Me.サブフォーム名.Form.RecordSource = strSQL

試したこと・調べたこと

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

ChatGPTに聞くと、sql文が間違っていると指摘されましたが、違いそうです。

補足

クエリをソースオブジェクトに指定している理由は、リレーションされた別テーブルのデータを検索結果に表示したいからです。

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

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

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

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

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

guest

回答1

0

ベストアンサー

うまくいかない原因

セブフォームコントロールのソースオプジェクトにクエリを設定すると、フォームを開くときにクエリから自動でフォームを生成してそれをサブフォームに設定していると思われます。
Me.サブフォームコントロール名.Form が参照できることからFormオブジェクトが生成されていると推測できます。

そのFormオブジェクトの RecordSource を変更しても、Formオブジェクトが再生成されるわけではないので、最初に読み込んだときのデザインのままだと思われます。

※(動作から見ての推測ですので実際はどうかはMSのAccessの開発者にしか分かりませんが)

対処法

ソースオプジェクトに設定しているクエリのSQLを書き換えて、ソースオプジェクトを再設定することで、Formオブジェクトが再生成されて、SQLで指定した表示になる。

コード例

vba

1 Dim qd As DAO.QueryDef 2 Dim orgSQL As String 3 Set qd = CurrentDb.QueryDefs("クエリ1") 4 orgSQL = qd.SQL '元のSQLを保存しておく 5 6 qd.SQL = "【生成したSQL文】" 7 8 'SourceObjectの再設定 9 Me.埋め込み0.SourceObject = "" 10 Me.埋め込み0.SourceObject = "クエリ.クエリ1" 11 12 '元のSQLに戻しておく 13 qd.SQL = orgSQL 14

投稿2024/02/21 14:34

hatena19

総合スコア34352

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

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

keisuke8

2024/02/22 07:03

回答ありがとうございます。 試したところ問題が解決しました! ベストアンサーに選ばせていただきました。 大変勉強になりました。ありがとうございます。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.31%

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

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

質問する

関連した質問