回答編集履歴

2

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

2018/02/28 17:21

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -2,7 +2,7 @@
2
2
 
3
3
 
4
4
 
5
- 勘違いしているようですが、QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースにパラメータが設定されるわけではありません。宣言したQueryDefをOpenRecorsetしたときに開かれるレコードセットに適用されますが、フォームとは無関係です。
5
+ 勘違いしているようですが、QueryDefを宣言してそれにパラメータを設定していますが、これでレコードソースのパラメータークエリにパラメータが設定されるわけではありません。宣言したQueryDefをOpenRecorsetしたときに開かれるレコードセットに適用されますが、フォームとは無関係です。
6
6
 
7
7
 
8
8
 

1

補足の追加

2018/02/28 17:21

投稿

hatena19
hatena19

スコア33715

test CHANGED
@@ -53,3 +53,53 @@
53
53
 
54
54
 
55
55
  フィールド名や条件は実際のものに合わせて変更してください。
56
+
57
+
58
+
59
+ ---
60
+
61
+  誤解を招きかねない表現があったので、補足説明しておきます。
62
+
63
+  もし、QueryDef で開いたレコードセットをフォームのソースにしたい場合は、下記のようなコードになります。
64
+
65
+
66
+
67
+ ```vba
68
+
69
+ Private Sub Form_Load()
70
+
71
+ Dim qd As DAO.QueryDef
72
+
73
+ Dim rs As DAO.Recordset
74
+
75
+
76
+
77
+ Set qd = CurrentDb.QueryDefs("クエリ1")
78
+
79
+
80
+
81
+ With qd
82
+
83
+ 'テキストボックス1
84
+
85
+ .Parameters("条件1") = Nz([Forms]![画面X]![画面X内のtxb1],"")
86
+
87
+ 'テキストボックス2
88
+
89
+ .Parameters("条件2") = Nz([Forms]![画面X]![画面X内のtxb2],"")
90
+
91
+ 'コンボボックス
92
+
93
+ .Parameters("PARAMT") = Nz([Forms]![画面X]![画面X内のcmb],"")
94
+
95
+ Set rs = .OpenRecordset 'クエリからレコードセットを開く
96
+
97
+ Set Me.RecordSet = rs '開いたレコードセットをフォームのRecordSetプロパティに設定する
98
+
99
+ End With
100
+
101
+ End Sub
102
+
103
+ ```
104
+
105
+ この場合は、レコードソースは空白にしておく必要があります。すなわち、**レコードソースと RecordSetプロパティは別物**ということです。RecordSetプロパティに OpenRecordset で開いたレコードセットを設定することはできますが、いろいろ制限がありますので、メリットはほとんどないと思います。