重要なお知らせ

「教えて! goo」は2025年9月17日(水)をもちまして、サービスを終了いたします。詳細はこちら>

電子書籍の厳選無料作品が豊富!

過去の質問にも同じようなものがありましたので、参考にしながらやってみたのですが、うまくいかなかったので質問させて頂きます。
Windows2000・アクセス2000を利用しています。フォーム上で非連結のテキストボックス1つとサブフォームを作成しています。テキストボックスに[No]を入力で指定すると、テキストボックス更新時にサブフォームの内容が、その[No]のデータのみに抽出されて再表示するようにしたいと思っています。
SQLで並べ替えと抽出をしています。コードは下記のような感じで作成しています。

Private Sub 検索No_AfterUpdate()

Dim Db As Database
Dim Qd As QueryDef
Dim No As Integer
Dim Sql_Str As String

Set Db = CurrentDb
Set Qd = Db.QueryDefs("Q_抽出")

No = [検索No].Value

Sql_Str = "SELECT T_テンプレート明細.*" & _
" FROM T_テンプレート明細 INNER JOIN T_テンプレート ON T_テンプレート明細.テンプレートNo = T_テンプレート.テンプレートNo" & _
" WHERE [T_テンプレート明細].[テンプレートNo] = " & No & _
" ORDER BY [T_テンプレート明細].[テンプレートNo], [T_テンプレート明細].[テンプレートID];"

Qd.Sql = Sql_Str
サブフォーム名.Requery

Qd.Close
Db.Close

End Sub

サブフォームをrequeryすれば再表示するのかなと思っているのですが・・・・テキストボックスに更新をかけた後にクエリを確認するとSQLは一応指定出来ているようです。簡単な説明で分かりにくいかもしれませんがよろしくお願い致します。

A 回答 (1件)

サブフォームの RecordSource が [Q_抽出] というクエリになっているようですが、これは必要ですか?


というのも、フォームの RecordSource はテーブルやクエリ以外に、SQL 文字列でも可能だからです。
もし必要じゃないなら、この場合 DAO の Db や Qd は必要ありません。
------------------------------------------------
必要か不必要かは、親フォームを開いた直後にどう表示させたいのか、ってところが関連しますね。
親フォームを開いた直後のサブフォームは全件表示でかまわないのなら、デザイン時(フォームを開いた直後の)サブフォームの RecordSource は質問に書いてある SQL 文字列の中から WHERE の部分を省いた形で OK です。どうせテキストボックスに数値を入力した時点で書き換わりますし。

と前置き。

Me.サブフォームコントロール名.Form.RecordSource = Sql_Str
Me.サブフォームコントロール名.Requery

これでいけると思います。
変数[Sql_Str] と変数[No] の中身は今のままでかまわないと思います。
    • good
    • 0
この回答へのお礼

ありがとうございます。うまくいきました!(>_<)!
まだまだVBAを十分理解で来ていないので、型に当てはめて作ることしか出来ず、ご指摘頂いたDbやQdも以前に良く似たコードを作ったときのまま利用していました。本当にありがとうございます。これからもっと勉強していきたいと思います。

お礼日時:2004/12/16 13:29

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!