回答編集履歴
2
誤解されやすい表現を修正
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
補足の追加
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 で開いたレコードセットを設定することはできますが、いろいろ制限がありますので、メリットはほとんどないと思います。
|