• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:アクセスのフォーム)

アクセスのフォームでクエリを実行する方法とは?

このQ&Aのポイント
  • アクセスのフォームでボタンをクリックすると、詳細部分にクエリの結果を表示させることは可能ですか?
  • 表示された文字をクリックすると、クエリの抽出条件がテキストボックスに入力され、その条件でクエリが実行されます。
  • テーブル形式ではなく、フォームの形式でクエリの結果を表示することができます。

質問者が選んだベストアンサー

  • ベストアンサー
  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.1

サブフォーム形式にした方が、考え方がすっきりすると思います。 前回の http://oshiete1.goo.ne.jp/qa5488799.html の回答も合わせ書いてみます。 前回の帳票部分をフォーム「F_0」とします。 これからボタンで起動しようとしているフォームを「F_1」「F_2」「F_3」と仮定します。 各「F1」「F_2」「F_3」のレコードソースには、それなりのクエリが設定されているものとします。 メインのフォームを「F1」とし、サブフォームコントロール名を「FSUB」とすると、 前回分の回答は、フォーム「F1」「F_0」で以下の様になります。 動作検証していないので、動かないとかあったら、ドンドン修正してください。 以下例) ・フォーム「F1」:このフォームは非連結フォームとなります(単票形式) ' 表示フィルターの設定 Private Sub SetFilter()   Dim sWhere As String   Dim sAndOr As String   sAndOr = " AND "   sWhere = ""   If (Not IsNull(Me.txt部署)) Then     sWhere = sWhere & sAndOr & "([部署] = " & Me.txt部署 & ")"   End If '  If (Not IsNull(Me.txt担当者名)) Then '    sWhere = sWhere & sAndOr & "([担当者名] = '" & Me.txt担当者名 & "')" '  End If '  If (Not IsNull(Me.txt品名)) Then '    sWhere = sWhere & sAndOr & "([品名] = '" & Me.txt品名 & "')" '  End If   With Me.FSUB.Form     If (Len(sWhere) > 0) Then       .Filter = Mid(sWhere, Len(sAndOr) + 1)       .FilterOn = True     Else       .FilterOn = False       .Filter = ""     End If   End With End Sub ' 初期状態 条件のクリア Private Sub Form_Load()   Call btn00_Click End Sub ' 条件クリアのボタンが押されたら Private Sub btn00_Click()   Me.txt部署 = Null   Me.txt担当者名 = Null   Me.txt品名 = Null   Me.FSUB.SourceObject = "F_0" ' 初期のサブフォーム設定   Call SetFilter End Sub ' ヘッダー部に配置したテキストボックスの更新後処理 Private Sub txt部署_AfterUpdate()   Call SetFilter End Sub Private Sub txt担当者名_AfterUpdate() '  Call SetFilter End Sub Private Sub txt品名_AfterUpdate() '  Call SetFilter End Sub ・フォーム「F_0」 マウスでクリックされたら Private Sub 部署_Click()   With Me.Parent     .txt部署.SetFocus     .txt部署.Text = Me.部署   End With End Sub Private Sub 担当者名_Click()   With Me.Parent     .txt担当者名.SetFocus     .txt担当者名.Text = Me.担当者名   End With End Sub Private Sub 品名_Click()   With Me.Parent     .txt品名.SetFocus     .txt品名.Text = Me.品名   End With End Sub 追加機能で、フォーム「F1」の各ボタンがクリックされたら、 フォーム「F1」での記述で、サブフォームを切り替えます。 Private Sub ボタン1_Click()   Me.FSUB.SourceObject = "F_1" End Sub Private Sub ボタン2_Click()   Me.FSUB.SourceObject = "F_2" End Sub Private Sub ボタン3_Click()   Me.FSUB.SourceObject = "F_3" End Sub 具体的なデータサンプルがあれば、動作サンプルを提供できるかもしれません。

doradora64
質問者

お礼

いつも親切に回答頂き誠にありがとうございます。 初心者な質問ですいませんが、テキストボックスの部分をコンボボックスにすると、コンボボックスで選択した際にエラーになってしまいます。(Withがありません)この場合はどの様にしたらよいでしょうか?

その他の回答 (3)

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.4

#4です。 誤解釈していたかもしれません。 メインからサブ側への設定でしょうか。 サブからメイン側への設定でしょうか。 #4は、サブからメイン側として考えてました。 (今日はこれにて)

doradora64
質問者

お礼

お疲れ様です。 今日試してみた所うまくいきました。 私の間違いで、以前回答頂いた内容と間違っていました。 Private Sub 担当者名_Click()   With Me.Parent     Me.担当者名.SetFocus     Me.担当者名.Text = Me.担当者名   End With End Sub となっていたからうまくいかなたったのでしょうか Meを削除したらうまくいきました。 迷惑かけます。ありがとうございました。

doradora64
質問者

補足

おはようございます。 会社では、"教えて!goo"は見ることはできるのですが、質問する事はできなくなっているので、会社で色々試してみて、また返事させて頂きます。ありがとうございます。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.3

#3です 記述内容からみて、おかしそうなところはないような感じですが。 以下をやる前にはファイルのコピーは取っておいてください。 VBE画面の方でのコンパイル(メニューのデバッグの1番上)や、 最適化(Officeボタンの管理の)をしてみてどうなりますか。 また、新規 accdb を作成し、前のものから全てをインポートしてみて、どうなりますか。 (たしか2007でしたよね) でも解決しないとなると、私の手には負えないものと思います。 補足) 検索条件として代入する先がコンボボックスということですが、コンボボックスの設定はどのようになっていますか。 サンプルで示したもので説明してみると、 Private Sub 設備ID_Click()   With Me.Parent     .txt設備ID.SetFocus     .txt設備ID.Text = Me.設備ID   End With End Sub Private Sub 設備名_Click()   Call 設備ID_Click End Sub というところがあったと思いますが、代入先「txt設備ID」をコンボボックスにして、 値集合ソースが、2列の SELECT 設備ID, 設備名 FROM T設備; で、列幅を 0cm;4cm の様に1列目を表示しないようになっている時には、     .txt設備ID.Text = Me.設備ID 部分は     .txt設備ID.Text = Me.設備名 のように、表示されている部分のものを代入する必要があります。 コンボボックスが1列のみであれば、テキストボックスと同じ扱いで良いと思います。

  • 30246kiku
  • ベストアンサー率73% (370/504)
回答No.2

#2です > テキストボックスの部分をコンボボックスにすると、コンボボックスで選択した際にエラーになってしまいます。(Withがありません)この場合はどの様にしたらよいでしょうか すみません。 どの部分のテキストボックスを、どのような設定のコンボボックスに変更されたのでしょうか。 詳しく説明していただけませんか?

doradora64
質問者

補足

お世話になります。 Private Sub 担当者名_Click()   With Me.Parent     .担当者名.SetFocus     .担当者名.Text = Me.担当者名   End With End Sub これをフォームF_2の詳細部のテキストボックス"担当者名"のクリック時に登録しました。 F1のコンボボックスの名前を"担当者名"としました。 そして、F1でサブフォームにF_2を表示させた時にサブフォームの担当者名をクリックすると、"End With が必要です"となってしまいます。 すいません。テキストボックスでもコンボボックスでも同じでした。 フォームF_2に登録するというのが間違いでしょうか? お手数かけます。

関連するQ&A