Microsoft Access 掲示板

フォームを帳票フォームで開く

6 コメント
views
4 フォロー

サブフォーム1をQuery.Q_Transactionをコントロールにして作ってあります。
この検索をSQLを使って、

Me.sbf1.SourceObject = "Query.Q_Transaction"
Me.sbf1.Form.RecourSource = strSQL

で、表示させています。この結果がデータシートビューで出てきます。
デフォルトは帳票フォームをデフォルトビューとしているのですが、検索後も帳票フォームの形で出すのはどうすればいいのでしょうか。

nokonoko
作成: 2020/07/02 (木) 11:07:15
通報 ...
1

用語の使い方が間違っているようなので、正確に状況が伝わりません。

サブフォーム1をQuery.Q_Transactionをコントロールにして作ってあります。

「サブフォーム1」という名前のフォームのレコードソースプロパティにクエリ名「Q_Transaction」を設定してあるということでしょうか。
それとも「サブフォーム1」というサブフォームコントロールの「ソースオブジェクト」プロパティに「Query.Q_Transaction」とクエリを設定しているということでしょうか。

Me.sbf1.SourceObject = "Query.Q_Transaction"
Me.sbf1.Form.RecourSource = strSQL

これはVBAで「sbf1」というサブフォームコントロールの「ソースオブジェクト」プロパティに「Query.Q_Transaction」とクエリを設定して、さらにレコードソースのSQLを書き換えてますね。

デフォルトは帳票フォームをデフォルトビューとしているのですが、検索後も帳票フォームの形で出すのはどうすればいいのでしょうか。

その帳票フォームの名前はなんでしょうか。その帳票フォームはどこで使用してますか。

正確の用語を使って、状況を説明してください。

2
nokonoko 2020/07/02 (木) 13:32:41 653a6@54883

ご回答ありがとうございます

「サブフォーム1」という名前のフォームのレコードソースプロパティにクエリ名「Q_Transaction」を設定してあるということでしょうか。それとも「サブフォーム1」というサブフォームコントロールの「ソースオブジェクト」プロパティに「Query.Q_Transaction」とクエリを設定しているということでしょうか。

レコードソースプロパティにクエリ名「Q_Transaction」を設定してあります。(このクエリを基にフォームウィザードで作りました)

その帳票フォームの名前はなんでしょうか。その帳票フォームはどこで使用してますか。

sbf1のプロパティーシートのDefault ViewをContinuous Formsにしています。フォーム"F_Display_Transaction"にサブフォーム"sbf1"を作って表示しています。
このフォームに検索用のテキストボックスなどがあり、これを基にしたstrSQLで動的に表示しなおしています。
SQLだけでサブフォームを作って表示させようとするとエラーが出てしまった(エラー内容は忘れました)ので、もとになるWHERE句のないクエリでサブフォームを作ってから、再度SQLで代入するような形で対処しました。

やろうとしていることは
T_Transactionのデータ(付随するマスターテーブルデータがある)について、T_Time(IN/Outの時刻)とM_ID(原料ID)で、期間内の各原料の取引のデータを帳票形式データで表示させること。その後、そのデータを修正、削除できるようにすることです。

3
nokonoko 2020/07/02 (木) 13:44:50 653a6@54883

SQLだけでサブフォームを作って表示させようとするとエラーが出てしまった(エラー内容は忘れました)ので

Error2467 The expression you entered refers to an object that is closed or doesn't exist
でした

4
hiroton 2020/07/02 (木) 14:32:28 076a1@f966d

フォームにはWhere句だけを後から設定・変更できるプロパティ(意訳)がありますよ

Me.sbf1.Form.filter = "(Where句に該当する文字列)"
Me.sbf1.Form.filterOn = True
5

レコードソースプロパティにクエリ名「Q_Transaction」を設定してあります。(このクエリを基にフォームウィザードで作りました)

このフォームの名前が「sbf1」ということですか。

sbf1のプロパティーシートのDefault ViewをContinuous Formsにしています。フォーム"F_Display_Transaction"にサブフォーム"sbf1"を作って表示しています。

ひょっとしてお使いのAccessは英語版ですか。
日本語版なら「既定のビュー」プロパティが「帳票フォーム」に設定してあるということですね。

フォーム"F_Display_Transaction"上にサブフォームコントロールを配置して、そのコントロール名も「sbf1」ということでしょうか。

ちなみに、サブフォームコントロールとサブフォーム本体とは別ものですのでこの点はご留意ください。(下記リンク参照)

サブフォームとサブフォームコントロールの違いとは? - hatena chips

sbf1のプロパティーシートのDefault ViewをContinuous Formsにしています。フォーム"F_Display_Transaction"にサブフォーム"sbf1"を作って表示しています。
で、このサブフォームコントロールの「ソースオブジェクト」プロパティに「sbf1」とサブフォーム名を設定しているということでしょうか。

この場合は、サブフォームコントロール名とサブフォーム名がたまたま同じということになりますね。

この状態で、

Me.sbf1.SourceObject = "Query.Q_Transaction"

を実行したら、ソースオブジェクトは「sbf1」フォームから「Q_Transaction」クエリに置き換わります。クエリはデータシートビュー表示しかできませんので、当然データシートビュー表示に切り替わります。

やろうとしていることは
T_Transactionのデータ(付随するマスターテーブルデータがある)について、T_Time(IN/Outの時刻)とM_ID(原料ID)で、期間内の各原料の取引のデータを帳票形式データで表示させること。

SourceObject は変更せずに(フォームのままで)、そのフォームに対して抽出条件を設定すればいいでしょう。

方法は、hirotonさんの回答を参照ください。

6
nokonoko 2020/07/02 (木) 16:58:32 653a6@54883

ご教示ありがとうございました。おかげで助かりました。
また、よろしくお願いいたします。