回答編集履歴

4

追記

2020/06/02 02:21

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -143,3 +143,5 @@
143
143
  End Sub
144
144
 
145
145
  ```
146
+
147
+ ループ内で何をしたいかによっては、ループせずに単にクエリーの実行だけで済む場合もあります。

3

追記

2020/06/02 02:21

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -77,3 +77,69 @@
77
77
 
78
78
 
79
79
  ただ、2重ループだと発注No毎にSQLを発行する事になるので、ループ内で発注Noでキーブレイクするようにすれば、SQLの発行自体は1回で済みます。
80
+
81
+ ```VBA
82
+
83
+ Sub Sample1()
84
+
85
+
86
+
87
+ Dim cn As New ADODB.Connection
88
+
89
+ Dim rs As New ADODB.Recordset
90
+
91
+ Dim mySQL As String
92
+
93
+ Dim myKey As String
94
+
95
+
96
+
97
+ Set cn = CurrentProject.Connection
98
+
99
+ Set rs = New ADODB.Recordset
100
+
101
+
102
+
103
+ mySQL = "SELECT *, (select count(*) from T_stock where 発注No=stk.発注No) as 明細件数 FROM T_stock As stk"
104
+
105
+ rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
106
+
107
+
108
+
109
+ myKey = ""
110
+
111
+ Do Until rs.EOF
112
+
113
+
114
+
115
+ If myKey! <> rs!発注No Then
116
+
117
+ myKey! = rs!発注No
118
+
119
+ '以下発注No毎の処理
120
+
121
+ Debug.Print rs!発注No & "," & rs!納入先名称
122
+
123
+ End If
124
+
125
+ '以下明細毎の処理
126
+
127
+ Debug.Print rs!納期日 & "," & rs!納入先郵便番号
128
+
129
+
130
+
131
+ rs.MoveNext
132
+
133
+
134
+
135
+ Loop
136
+
137
+
138
+
139
+ rs.Close
140
+
141
+
142
+
143
+ End Sub
144
+
145
+ ```

2

推敲

2020/06/02 02:18

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -44,7 +44,7 @@
44
44
 
45
45
  mySQL = "SELECT 発注No, Count(行) AS 明細レコード数 FROM T_stock Group BY 発注No"
46
46
 
47
- rs.Open mySQL3, cn, adOpenKeyset, adLockOptimistic
47
+ rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
48
48
 
49
49
  Do Until rs.EOF
50
50
 

1

追記

2020/06/02 02:02

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -7,3 +7,73 @@
7
7
 
8
8
 
9
9
  ※SQLの内容は意味不明で理解できません。
10
+
11
+
12
+
13
+ 追記
14
+
15
+ --
16
+
17
+ 多分以下の様な事がしたいのだと思います。
18
+
19
+ ```VBA
20
+
21
+ Sub Sample1()
22
+
23
+
24
+
25
+ Dim cn As New ADODB.Connection
26
+
27
+ Dim rs As New ADODB.Recordset
28
+
29
+ Dim rs2 As New ADODB.Recordset
30
+
31
+ Dim mySQL As String
32
+
33
+ Dim mySQL2 As String
34
+
35
+
36
+
37
+ Set cn = CurrentProject.Connection
38
+
39
+ Set rs = New ADODB.Recordset
40
+
41
+ Set rs2 = New ADODB.Recordset
42
+
43
+
44
+
45
+ mySQL = "SELECT 発注No, Count(行) AS 明細レコード数 FROM T_stock Group BY 発注No"
46
+
47
+ rs.Open mySQL3, cn, adOpenKeyset, adLockOptimistic
48
+
49
+ Do Until rs.EOF
50
+
51
+ Debug.Print rs!発注No
52
+
53
+ mySQL2 = "SELECT * FROM T_stock where 発注No='" & rs!発注No & "'"
54
+
55
+ rs2.Open mySQL2, cn, adOpenKeyset, adLockOptimistic
56
+
57
+ Do Until rs2.EOF
58
+
59
+ Debug.Print rs2!納期日 & "," & rs2!送付先郵便番号
60
+
61
+ rs2.MoveNext
62
+
63
+ Loop
64
+
65
+ rs2.Close
66
+
67
+ rs.MoveNext
68
+
69
+ Loop
70
+
71
+ rs.Close
72
+
73
+ End Sub
74
+
75
+ ```
76
+
77
+
78
+
79
+ ただ、2重ループだと発注No毎にSQLを発行する事になるので、ループ内で発注Noでキーブレイクするようにすれば、SQLの発行自体は1回で済みます。