質問するログイン新規登録

回答編集履歴

2

誤解されやすい表現を修正

2018/02/28 17:21

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  「画面Y」のレコードソースが「クエリ1」ということですね。
2
2
 
3
- 勘違いしているようですが、QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースにパラメータが設定されるわけではありません。宣言したQueryDefをOpenRecorsetしたときに開かれるレコードセットに適用されますが、フォームとは無関係です。
3
+ 勘違いしているようですが、QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースのパラメータークエリにパラメータが設定されるわけではありません。宣言したQueryDefをOpenRecorsetしたときに開かれるレコードセットに適用されますが、フォームとは無関係です。
4
4
 
5
5
  ご希望のことは、画面X の テキストボックスやコンボボックスにデータが未入力の時に、その条件は無視したいということだと推測しましたが、あってますか。だとしたら、レコードソースには抽出条件は設定せずに、開くときに、抽出条件(フィルター)を設定すればいいかと思います。
6
6
 

1

補足の追加

2018/02/28 17:21

投稿

hatena19
hatena19

スコア34367

answer CHANGED
@@ -25,4 +25,29 @@
25
25
  End Sub
26
26
  ```
27
27
 
28
- フィールド名や条件は実際のものに合わせて変更してください。
28
+ フィールド名や条件は実際のものに合わせて変更してください。
29
+
30
+ ---
31
+  誤解を招きかねない表現があったので、補足説明しておきます。
32
+  もし、QueryDef で開いたレコードセットをフォームのソースにしたい場合は、下記のようなコードになります。
33
+
34
+ ```vba
35
+ Private Sub Form_Load()
36
+ Dim qd As DAO.QueryDef
37
+ Dim rs As DAO.Recordset
38
+
39
+ Set qd = CurrentDb.QueryDefs("クエリ1")
40
+
41
+ With qd
42
+ 'テキストボックス1
43
+ .Parameters("条件1") = Nz([Forms]![画面X]![画面X内のtxb1],"")
44
+ 'テキストボックス2
45
+ .Parameters("条件2") = Nz([Forms]![画面X]![画面X内のtxb2],"")
46
+ 'コンボボックス
47
+ .Parameters("PARAMT") = Nz([Forms]![画面X]![画面X内のcmb],"")
48
+ Set rs = .OpenRecordset 'クエリからレコードセットを開く
49
+ Set Me.RecordSet = rs '開いたレコードセットをフォームのRecordSetプロパティに設定する
50
+ End With
51
+ End Sub
52
+ ```
53
+ この場合は、レコードソースは空白にしておく必要があります。すなわち、**レコードソースと RecordSetプロパティは別物**ということです。RecordSetプロパティに OpenRecordset で開いたレコードセットを設定することはできますが、いろいろ制限がありますので、メリットはほとんどないと思います。