データシート(サブフォーム)の複数条件抽出について。
現在メインフォーム上に、オートフォーム:データシート(基となるテーブル(マスターA)選択)
をサブフォームとして置き、メインフォーム上にコンボボックス2個(コンボ1、コンボ2)&コマンドボタン1個設置してあります。
基テーブル(マスターA)には
種類 サイズ 商品名
の3フィールドがあります。
やりたい事は、コンボ1(対応フィールド:種類)及びコンボ2(対応フィールド:サイズ)で選択し
コマンドボタンを押下で、サブフォーム内データの抽出です。
まだACCESSを始めたばかりの未熟者のため、ネットや本で調べながらやっているのですが
どうしても上記がわからなくて完全に進行ストップしてしまったので
ご教授願いたいと思い質問させて頂きました。
Filterをかけ、条件はANDで繋げば良いとは思うのですが
どのようにコードを組み上げれば良いのか調べつかないため
何卒ご教授の程宜しくお願い致します。
また、質問させて頂いている間も引き続き自分で調べながら
やっていこうと思います。
No.2ベストアンサー
- 回答日時:
>私の環境は、ACCESS2000、DAO利用、そして今回はクエリを使用してもしなくても・・・
>というよりも、どのように組み上げたらいいのかわからなかったので・・・すみません。
方法は問わない、というより、ちょうど#1で示した例が殆ど使えますね^^
Accessは組み立て方やDB接続方法なども多種多様に存在しますので、その分覚える事が多いのは確かですね。
ただその方法一つでレスポンスに大きく関わってくる場合があるので、ある程度一人で組み立てられるようになると、次の課題は「レスポンス」になってくると思います。
>If rs.RecordCount <> 0 Then
> 'レコードがあった際の処理
>こちらには、サブフォームへ表示させるコードを入れれば良いのですよね?
その通りです。
>その際、サブフォームへ表示させるのはどのようにしたらいいのですか?
現状、どこまで組みあがってますか?
初期表示でサブフォームに表示、などの処理はまだ未実装でしょうか?
一応一から説明しておきますと、
・データシートと連結させる用のワークテーブルを作成
・フィールドは「種類」・「サイズ」・「商品名」
・サブフォーム(データシート)とワークテーブルを連結させる
・デザインビューでメインフォームを開き、サブフォームを右クリック→プロパティ
・ソースオブジェクトに先ほど作ったワークテーブルを指定
ここまでが環境条件になります。
次にソース側ですが、
Set rs = qd.OpenRecordset
でクエリで抽出したデータをrsにセットしたので、その抽出したデータを今度はワークシートに登録(Insert)してやる必要があります。
ですので、
Private Sub コマンドボタン_Click()
Dim dbLocal As Database
Dim rs As DAO.Recordset
Dim rs2 As DAO.Recordset
Dim qd As DAO.QueryDef
Set dbLocal = CurrentDb
Set qd = dbLocal.QueryDefs("クエリ_マスターA")
qd![検索種類] = Me.コンボ1
qd![検索サイズ] = Me.コンボ2
Set rs = qd.OpenRecordset
If rs.RecordCount <> 0 Then
rs.MoveLast '一度抽出したデータの最終行に移動
rs.MoveFirst '最初の行に移動
DoCmd.RunSQL "delete * from ワークテーブル" 'ワークテーブルのデータを一度削除
Set rs2 = dbLocal.OpenRecordset("ワークテーブル") 'ワークテーブルを開く
With rs2
Do While Not rs.EOF '抽出したデータの最終行までループ
.AddNew 'ワークテーブルへの書き込み
rs2!種類 = rs!種類 '抽出した「種類」をワークテーブルのフィールド「種類」へ
rs2!サイズ = rs!サイズ '抽出した「サイズ」をワークテーブルのフィールド「サイズ」へ
rs2!商品名 = rs!商品名 '抽出した「商品名」をワークテーブルのフィールド「商品名」へ
.Update 'コミットのようなもの
rs.MoveNext '抽出したデータの次の行へ
Loop
End With
Else
'レコードがなかった場合の処理
End If
End Sub
こんな感じでワークテーブルに登録してやります。
サブフォームのソースオブジェクトにテーブル名をいれることで、そのサブフォームは書かれたテーブルと連結状態になります。
簡単にいうと
連結状態になる=テーブルのデータがその件数分だけ表示される
ということですので、その連結させたテーブルにデータを入れてやれば、画面にも表示される、という仕組みです。
なんかふとクエリで抽出しないと動的に変わらなかった気もしますが・・・一応上記で試してみてください。
sykt1217さん誠にありがとうございます。
とても丁寧且つ細かい説明頂き、理解しやすかったです。
今回のご提示頂いた方法は、今後私にとってはとても利用頻度が高くなると
思います。抽出したものを表示というものが多いので・・・。
まだ完全に理解しているわけではありませんが、
これからも勉強していきたいと思います。
まずは、自分で組めるようになるまで。
その先のレスポンスは、先の事過ぎるので、とりあえず考えないようにします。
誠にありがとうございました。
1歩進む事ができました。
No.1
- 回答日時:
ちょっと環境がわからないので、一部の例を記します。
質問する際はAccessのいくつか、DAOを用いているのか、ADOを用いているのか、Accessクエリは使用するか否かなどを書いてもらえると回答しやすくなります。
一部例:DAO・Accessクエリを使用した場合
(1)Accessクエリ「クエリ_マスターA」を作成(名前はテキトーです)
(1)-1 「クエリ_マスターA」のフィールドに「種類」「サイズ」「商品名」をセット
(1)*2 フィールド「種類」の抽出条件に「[検索種類]」をセット(抽出条件名はテキトーです)
(1)-3 フィールド「サイズ」の抽出条件に「[検索サイズ]」をセット(抽出条件名はテキトーです)
(2)コマンドボタンの「クリック時」のイベントを作る(Private Sub コマンドボタン_Click())
(2)-1 イベント内で以下を記入
Private Sub コマンドボタン_Click()
Dim dbLocal As Database
Dim rs As DAO.Recordset
Dim qd As DAO.QueryDef
Set dbLocal = CurrentDb
Set qd = dbLocal.QueryDefs("クエリ_マスターA")
qd![検索種類] = Me.コンボ1
qd![検索サイズ] = Me.コンボ2
Set rs = qd.OpenRecordset
If rs.RecordCount <> 0 Then
'レコードがあった際の処理
Else
'レコードがなかった場合の処理
End If
End Sub
たぶんこれで出来ると思います。
DAOを用いる場合は、エディタの「ツール→参照設定」に「Microsoft DAO x.x Object Library」があることを確認して下さいね。(ない場合はリストから探してチェックを入れて下さい。)
この回答への補足
sykt1217さんありがとうございます。
そして大変失礼致しました。
私の環境は、ACCESS2000、DAO利用、そして今回はクエリを使用してもしなくても・・・
というよりも、どのように組み上げたらいいのかわからなかったので・・・すみません。
1点確認があるのですが
If rs.RecordCount <> 0 Then
'レコードがあった際の処理
こちらには、サブフォームへ表示させるコードを入れれば良いのですよね?
その際、サブフォームへ表示させるのはどのようにしたらいいのですか?
大変お手数をお掛けしますが、引き続きお付き合い頂けれ有難いです。
あまりに未熟で申し訳ございません。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
似たような質問が見つかりました
- その他(データベース) 更新クエリをリンクデータベーステーブルに実行し実行時エラー3362固有インデックスに重複する値が含ま 1 2022/09/21 11:44
- Access(アクセス) Accessにインポートした複数のテーブルを表示させる方法が分かりません。 1 2023/01/30 20:22
- Access(アクセス) アクセスの更新クエリでカレントレコードのみ更新したい 1 2022/06/02 23:32
- Access(アクセス) Access 登録ボタンからサブフォームの更新 1 2022/07/22 10:23
- Access(アクセス) Access2016でフォーム内にExcelの複数シートを 表示させるイメージで複数テーブルの デー 1 2022/11/25 15:30
- Visual Basic(VBA) ユーザーフォーム「frm_基本❶」を立ち上げると新規で入力する行数を右下のNoとして表示しています。 1 2023/03/16 19:02
- Access(アクセス) AccessVBAで降順にするテーブル作成クエリを使用して作成したテーブルを削除し同一のテーブル作成 1 2023/01/06 11:17
- その他(データベース) Accessフォームからパラメーターで表示したレコードを指定のExcelのセルへ転送する方法について 2 2022/08/22 18:04
- Excel(エクセル) Excelマクロ 差分抽出の方法が知りたいです。 2 2023/03/07 13:25
- その他(Microsoft Office) Excelで総数量を変動させたい 2 2022/11/04 23:49
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
Accessで縦と横を入れ替えたい
-
【access】複数のフィールドの...
-
DataGridViewで複数条件の抽出...
-
ACCESS VBAでテーブル内の特定...
-
データがあれば○○なければのSQL
-
Access vbaで重複レコードの削...
-
社員名簿から検索する関数
-
sql文で削除クエリを書く
-
別のaccessファイルからデータ...
-
DAOでSQLServerに接続し、LeftJ...
-
ACCESS DCOUNTの抽出条件について
-
抽出条件でデータ型が一致しま...
-
ACCESSで購入回数を表示する方...
-
重複した複数のレコードを1レ...
-
「ご処理進めて頂きますようお...
-
iD
-
エクセルで、日付を入力すると...
-
CloseとDisposeの違い
-
メルカリのメルカードで買い物...
-
Excelシート上のマクロを登録し...
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
データがあれば○○なければのSQL
-
ACCESS DCOUNTの抽出条件について
-
【access】複数のフィールドの...
-
ACCESS VBAでテーブル内の特定...
-
Accessで縦と横を入れ替えたい
-
Access vbaで重複レコードの削...
-
VBAでテーブル名とカラム名を動...
-
SQLServer→Access インポート
-
別のaccessファイルからデータ...
-
抽出条件でデータ型が一致しま...
-
ACCESSで購入回数を表示する方...
-
DAOでSQLServerに接続し、LeftJ...
-
アクセスで連続データをテーブ...
-
ACCESSで実行時エラー3008
-
sql文で削除クエリを書く
-
Access から Excelのシートをイ...
-
access追加クエリーでform入力...
-
VB.NETでテーブルを作成
-
アクセスで定数を利用したい。
-
ACCESSのクエリ、SQLに変数を使...
おすすめ情報