回答編集履歴

5

追記

2020/05/21 07:04

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -57,3 +57,43 @@
57
57
  CurrentDb.Execute "update テーブル1 set Y_N=False where ID=2 and Y_N=True"
58
58
 
59
59
  ```
60
+
61
+
62
+
63
+ 追記2
64
+
65
+ --
66
+
67
+ 全てリセット
68
+
69
+ ```VBA
70
+
71
+ Dim rs As New ADODB.Recordset
72
+
73
+ rs.Open "テーブル1", CurrentProject.Connection, , adLockOptimistic
74
+
75
+ rs.MoveFirst
76
+
77
+ Do While rs.EOF = False Then
78
+
79
+ If rs!Y_N = True Then
80
+
81
+ rs!Y_N = False
82
+
83
+ rs.Update
84
+
85
+ End If
86
+
87
+ rs.MoveNext
88
+
89
+ Loop
90
+
91
+ rs.Close
92
+
93
+ ```
94
+
95
+ ```VBA
96
+
97
+ CurrentDb.Execute "update テーブル1 set Y_N=False where Y_N=True"
98
+
99
+ ```

4

訂正

2020/05/21 07:04

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -32,11 +32,15 @@
32
32
 
33
33
  rs.Find "ID=2", adSearchForward
34
34
 
35
- If rs!Y_N = True Then
35
+ If rs.EOF = False Then
36
36
 
37
- rs!Y_N = False
37
+ If rs!Y_N = True Then
38
38
 
39
+ rs!Y_N = False
40
+
39
- rs.Update
41
+ rs.Update
42
+
43
+ End If
40
44
 
41
45
  End If
42
46
 

3

訂正

2020/05/21 02:50

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -16,7 +16,9 @@
16
16
 
17
17
  上記はDAOだと思い込んでの回答でしたので、無視して下さい。
18
18
 
19
+ 更新されないのは、`FIND`の条件が意図通りで無い事です。
20
+
19
- 更新されないのは、`FIND`してもloopしているのが`rs!Y_N = True`なので、1件しか更新されません。
21
+ `FIND`してもloopしているのが`rs!Y_N = True`なので、最初に見つけた1件しか更新されません。
20
22
 
21
23
 
22
24
 
@@ -28,21 +30,15 @@
28
30
 
29
31
  rs.Open "テーブル1", CurrentProject.Connection, , adLockOptimistic
30
32
 
31
- rs.MoveFirst
33
+ rs.Find "ID=2", adSearchForward
32
34
 
33
- Do While rs.EOF = False
35
+ If rs!Y_N = True Then
34
36
 
35
- If rs!Y_N = True Then
37
+ rs!Y_N = False
36
38
 
37
- rs!Y_N = False
39
+ rs.Update
38
40
 
39
- rs.Update
40
-
41
- End If
41
+ End If
42
-
43
- rs.MoveNext
44
-
45
- Loop
46
42
 
47
43
  rs.Close
48
44
 
@@ -54,6 +50,6 @@
54
50
 
55
51
  ```VBA
56
52
 
57
- CurrentDb.Execute "update テーブル1 set Y_N=False where Y_N=True"
53
+ CurrentDb.Execute "update テーブル1 set Y_N=False where ID=2 and Y_N=True"
58
54
 
59
55
  ```

2

追記

2020/05/21 02:47

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -47,3 +47,13 @@
47
47
  rs.Close
48
48
 
49
49
  ```
50
+
51
+
52
+
53
+ 尚、SQLを直接実行する方式だと以下だけで済みます。
54
+
55
+ ```VBA
56
+
57
+ CurrentDb.Execute "update テーブル1 set Y_N=False where Y_N=True"
58
+
59
+ ```

1

追記

2020/05/21 02:39

投稿

sazi
sazi

スコア25327

test CHANGED
@@ -9,3 +9,41 @@
9
9
  rs.Update
10
10
 
11
11
  ```
12
+
13
+ 追記
14
+
15
+ --
16
+
17
+ 上記はDAOだと思い込んでの回答でしたので、無視して下さい。
18
+
19
+ 更新されないのは、`FIND`してもloopしているのが`rs!Y_N = True`なので、1件しか更新されません。
20
+
21
+
22
+
23
+ なので、以下の様にする必要があります。
24
+
25
+ ```VBA
26
+
27
+ Dim rs As New ADODB.Recordset
28
+
29
+ rs.Open "テーブル1", CurrentProject.Connection, , adLockOptimistic
30
+
31
+ rs.MoveFirst
32
+
33
+ Do While rs.EOF = False
34
+
35
+ If rs!Y_N = True Then
36
+
37
+ rs!Y_N = False
38
+
39
+ rs.Update
40
+
41
+ End If
42
+
43
+ rs.MoveNext
44
+
45
+ Loop
46
+
47
+ rs.Close
48
+
49
+ ```