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

回答編集履歴

4

追記

2020/06/02 02:21

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -70,4 +70,5 @@
70
70
  rs.Close
71
71
 
72
72
  End Sub
73
- ```
73
+ ```
74
+ ループ内で何をしたいかによっては、ループせずに単にクエリーの実行だけで済む場合もあります。

3

追記

2020/06/02 02:21

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -37,4 +37,37 @@
37
37
  End Sub
38
38
  ```
39
39
 
40
- ただ、2重ループだと発注No毎にSQLを発行する事になるので、ループ内で発注Noでキーブレイクするようにすれば、SQLの発行自体は1回で済みます。
40
+ ただ、2重ループだと発注No毎にSQLを発行する事になるので、ループ内で発注Noでキーブレイクするようにすれば、SQLの発行自体は1回で済みます。
41
+ ```VBA
42
+ Sub Sample1()
43
+
44
+ Dim cn As New ADODB.Connection
45
+ Dim rs As New ADODB.Recordset
46
+ Dim mySQL As String
47
+ Dim myKey As String
48
+
49
+ Set cn = CurrentProject.Connection
50
+ Set rs = New ADODB.Recordset
51
+
52
+ mySQL = "SELECT *, (select count(*) from T_stock where 発注No=stk.発注No) as 明細件数 FROM T_stock As stk"
53
+ rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
54
+
55
+ myKey = ""
56
+ Do Until rs.EOF
57
+
58
+ If myKey! <> rs!発注No Then
59
+ myKey! = rs!発注No
60
+ '以下発注No毎の処理
61
+ Debug.Print rs!発注No & "," & rs!納入先名称
62
+ End If
63
+ '以下明細毎の処理
64
+ Debug.Print rs!納期日 & "," & rs!納入先郵便番号
65
+
66
+ rs.MoveNext
67
+
68
+ Loop
69
+
70
+ rs.Close
71
+
72
+ End Sub
73
+ ```

2

推敲

2020/06/02 02:18

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -21,7 +21,7 @@
21
21
  Set rs2 = New ADODB.Recordset
22
22
 
23
23
  mySQL = "SELECT 発注No, Count(行) AS 明細レコード数 FROM T_stock Group BY 発注No"
24
- rs.Open mySQL3, cn, adOpenKeyset, adLockOptimistic
24
+ rs.Open mySQL, cn, adOpenKeyset, adLockOptimistic
25
25
  Do Until rs.EOF
26
26
  Debug.Print rs!発注No
27
27
  mySQL2 = "SELECT * FROM T_stock where 発注No='" & rs!発注No & "'"

1

追記

2020/06/02 02:02

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,4 +2,39 @@
2
2
 
3
3
  そのクエリーで動作確認されたもののSQLをコードにリバースして下さい。
4
4
 
5
- ※SQLの内容は意味不明で理解できません。
5
+ ※SQLの内容は意味不明で理解できません。
6
+
7
+ 追記
8
+ --
9
+ 多分以下の様な事がしたいのだと思います。
10
+ ```VBA
11
+ Sub Sample1()
12
+
13
+ Dim cn As New ADODB.Connection
14
+ Dim rs As New ADODB.Recordset
15
+ Dim rs2 As New ADODB.Recordset
16
+ Dim mySQL As String
17
+ Dim mySQL2 As String
18
+
19
+ Set cn = CurrentProject.Connection
20
+ Set rs = New ADODB.Recordset
21
+ Set rs2 = New ADODB.Recordset
22
+
23
+ mySQL = "SELECT 発注No, Count(行) AS 明細レコード数 FROM T_stock Group BY 発注No"
24
+ rs.Open mySQL3, cn, adOpenKeyset, adLockOptimistic
25
+ Do Until rs.EOF
26
+ Debug.Print rs!発注No
27
+ mySQL2 = "SELECT * FROM T_stock where 発注No='" & rs!発注No & "'"
28
+ rs2.Open mySQL2, cn, adOpenKeyset, adLockOptimistic
29
+ Do Until rs2.EOF
30
+ Debug.Print rs2!納期日 & "," & rs2!送付先郵便番号
31
+ rs2.MoveNext
32
+ Loop
33
+ rs2.Close
34
+ rs.MoveNext
35
+ Loop
36
+ rs.Close
37
+ End Sub
38
+ ```
39
+
40
+ ただ、2重ループだと発注No毎にSQLを発行する事になるので、ループ内で発注Noでキーブレイクするようにすれば、SQLの発行自体は1回で済みます。