回答編集履歴

7

修正

2020/05/04 00:55

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -82,7 +82,7 @@
82
82
 
83
83
 
84
84
 
85
- [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。
85
+ [Find メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/find-method-ado)を使用して、同じ日付のデータに揃えて下さい。
86
86
 
87
87
 
88
88
 

6

推敲

2020/05/04 00:55

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -94,7 +94,7 @@
94
94
 
95
95
 
96
96
 
97
- adOpenDynamicではなく、adOpenStaticで更新の影響を受けないようにしてみてはどうでしょうか。
97
+ **adOpenDynamic**ではなく、**adOpenStatic**で更新の影響を受けないようにしてみてはどうでしょうか。
98
98
 
99
99
  ```VBA
100
100
 

5

追記

2020/05/03 08:14

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -83,3 +83,21 @@
83
83
 
84
84
 
85
85
  [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。
86
+
87
+
88
+
89
+ > adoRS2の方だけrecordが次へ送られない状態になりまして困っております。
90
+
91
+
92
+
93
+ adoRS2のデータに追加を行っているからだと思います。
94
+
95
+
96
+
97
+ adOpenDynamicではなく、adOpenStaticで更新の影響を受けないようにしてみてはどうでしょうか。
98
+
99
+ ```VBA
100
+
101
+ adoRS2.Open "ドル円", con, adOpenStatic
102
+
103
+ ```

4

訂正

2020/05/03 08:14

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -78,7 +78,7 @@
78
78
 
79
79
 
80
80
 
81
- どうしても2つのレコードセットで行いたいなら、相違のあるレコードセットを同時に一つづつ進めても一致するがありません。
81
+ どうしても2つのレコードセットで行いたいなら、全件纏めて処理する際の条件がありませんから上書きされたりしていますね
82
82
 
83
83
 
84
84
 

3

追記

2020/05/03 05:05

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -71,3 +71,15 @@
71
71
  End Sub
72
72
 
73
73
  ```
74
+
75
+
76
+
77
+ レコードセットで処理したいなら、テーブルを結合したselectのレコードセットを元にする、という方法もあります。
78
+
79
+
80
+
81
+ どうしても2つのレコードセットで行いたいなら、相違のあるレコードセットを同時に一つづつ進めても一致する訳がありません。
82
+
83
+
84
+
85
+ [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。

2

変更

2020/05/03 05:02

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -54,9 +54,11 @@
54
54
 
55
55
  strSQL = strSQL & vbCrLf & "SELECT 日付け, 終値, 始値, 高値, 安値, [前日比%]"
56
56
 
57
- strSQL = strSQL & vbCrLf & "FROM USD_JPY"
57
+ strSQL = strSQL & vbCrLf & "FROM USD_JPY LEFT JOIN ドル円"
58
58
 
59
- strSQL = strSQL & vbCrLf & "WHERE Not Exists(select 1 from ドル円 where 日付け=USD_JPY.日付け"
59
+ strSQL = strSQL & vbCrLf & " ON USD_JPY.日付け=ドル円.日付け"
60
+
61
+ strSQL = strSQL & vbCrLf & "WHERE ドル円.日付け Is Null"
60
62
 
61
63
  CurrentDb.Execute strSQL
62
64
 

1

追記

2020/05/02 14:55

投稿

sazi
sazi

スコア25195

test CHANGED
@@ -6,7 +6,11 @@
6
6
 
7
7
  以下はSQLの実行をVBA内で行う場合です。
8
8
 
9
- 但し、それぞれのテーブルで[日付け]が一意キーである前提です
9
+ 但し、それぞれのテーブルで[日付け]が一意キーである前提。
10
+
11
+ 先ず、[日付け]が同じもの同士を更新。
12
+
13
+ 次に、USD_JPYの[日付け]がドル円にないものを追加
10
14
 
11
15
  ```VBA
12
16
 
@@ -19,6 +23,24 @@
19
23
 
20
24
 
21
25
  DoCmd.SetWarnings False '更新確認のメッセージをOFFにする
26
+
27
+
28
+
29
+ strSQL = ""
30
+
31
+ strSQL = strSQL & "UPDATE ドル円 INNER JOIN USD_JPY ON ドル円.日付け=USD_JPY.日付け SET"
32
+
33
+ strSQL = strSQL & vbCrLf & " ドル円.終値=USD_JPY.終値"
34
+
35
+ strSQL = strSQL & vbCrLf & ",ドル円.始値=USD_JPY.始値"
36
+
37
+ strSQL = strSQL & vbCrLf & ",ドル円.高値=USD_JPY.高値"
38
+
39
+ strSQL = strSQL & vbCrLf & ",ドル円.安値=USD_JPY.安値"
40
+
41
+ strSQL = strSQL & vbCrLf & ",ドル円.[前日比%]=USD_JPY.[前日比%]"
42
+
43
+ CurrentDb.Execute strSQL
22
44
 
23
45
 
24
46
 
@@ -40,24 +62,6 @@
40
62
 
41
63
 
42
64
 
43
- strSQL = ""
44
-
45
- strSQL = strSQL & "UPDATE ドル円 INNER JOIN USD_JPY ON ドル円.日付け=USD_JPY.日付け SET"
46
-
47
- strSQL = strSQL & vbCrLf & " ドル円.終値=USD_JPY.終値"
48
-
49
- strSQL = strSQL & vbCrLf & ",ドル円.始値=USD_JPY.始値"
50
-
51
- strSQL = strSQL & vbCrLf & ",ドル円.高値=USD_JPY.高値"
52
-
53
- strSQL = strSQL & vbCrLf & ",ドル円.安値=USD_JPY.安値"
54
-
55
- strSQL = strSQL & vbCrLf & ",ドル円.[前日比%]=USD_JPY.[前日比%]"
56
-
57
- CurrentDb.Execute strSQL
58
-
59
-
60
-
61
65
  DoCmd.SetWarnings True '更新確認のメッセージをONにする
62
66
 
63
67