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

回答編集履歴

7

修正

2020/05/04 00:55

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -40,7 +40,7 @@
40
40
 
41
41
  どうしても2つのレコードセットで行いたいなら、全件纏めて処理する際の条件がありませんから上書きされたりしていますね。
42
42
 
43
- [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。
43
+ [Find メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/find-method-ado)を使用して、同じ日付のデータに揃えて下さい。
44
44
 
45
45
  > adoRS2の方だけrecordが次へ送られない状態になりまして困っております。
46
46
 

6

推敲

2020/05/04 00:55

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -46,7 +46,7 @@
46
46
 
47
47
  adoRS2のデータに追加を行っているからだと思います。
48
48
 
49
- adOpenDynamicではなく、adOpenStaticで更新の影響を受けないようにしてみてはどうでしょうか。
49
+ **adOpenDynamic**ではなく、**adOpenStatic**で更新の影響を受けないようにしてみてはどうでしょうか。
50
50
  ```VBA
51
51
  adoRS2.Open "ドル円", con, adOpenStatic
52
52
  ```

5

追記

2020/05/03 08:14

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -40,4 +40,13 @@
40
40
 
41
41
  どうしても2つのレコードセットで行いたいなら、全件纏めて処理する際の条件がありませんから上書きされたりしていますね。
42
42
 
43
- [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。
43
+ [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。
44
+
45
+ > adoRS2の方だけrecordが次へ送られない状態になりまして困っております。
46
+
47
+ adoRS2のデータに追加を行っているからだと思います。
48
+
49
+ adOpenDynamicではなく、adOpenStaticで更新の影響を受けないようにしてみてはどうでしょうか。
50
+ ```VBA
51
+ adoRS2.Open "ドル円", con, adOpenStatic
52
+ ```

4

訂正

2020/05/03 08:14

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -38,6 +38,6 @@
38
38
 
39
39
  レコードセットで処理したいなら、テーブルを結合したselectのレコードセットを元にする、という方法もあります。
40
40
 
41
- どうしても2つのレコードセットで行いたいなら、相違のあるレコードセットを同時に一つづつ進めても一致するがありません。
41
+ どうしても2つのレコードセットで行いたいなら、全件纏めて処理する際の条件がありませんから上書きされたりしていますね
42
42
 
43
43
  [Recordset.FindFirst メソッド](https://docs.microsoft.com/ja-jp/office/client-developer/access/desktop-database-reference/recordset-findfirst-method-dao)を使用して、同じ日付のデータに揃えて下さい。

3

追記

2020/05/03 05:05

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -34,4 +34,10 @@
34
34
  DoCmd.SetWarnings True '更新確認のメッセージをONにする
35
35
 
36
36
  End Sub
37
- ```
37
+ ```
38
+
39
+ レコードセットで処理したいなら、テーブルを結合したselectのレコードセットを元にする、という方法もあります。
40
+
41
+ どうしても2つのレコードセットで行いたいなら、相違のあるレコードセットを同時に一つづつ進めても一致する訳がありません。
42
+
43
+ [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

スコア25430

answer CHANGED
@@ -26,8 +26,9 @@
26
26
  strSQL = strSQL & vbCrLf & " 日付け, 終値, 始値, 高値, 安値, [前日比%]"
27
27
  strSQL = strSQL & vbCrLf & ")"
28
28
  strSQL = strSQL & vbCrLf & "SELECT 日付け, 終値, 始値, 高値, 安値, [前日比%]"
29
- strSQL = strSQL & vbCrLf & "FROM USD_JPY"
29
+ strSQL = strSQL & vbCrLf & "FROM USD_JPY LEFT JOIN ドル円"
30
- strSQL = strSQL & vbCrLf & "WHERE Not Exists(select 1 from ドル円 where 日付け=USD_JPY.日付け"
30
+ strSQL = strSQL & vbCrLf & " ON USD_JPY.日付け=ドル円.日付け"
31
+ strSQL = strSQL & vbCrLf & "WHERE ドル円.日付け Is Null"
31
32
  CurrentDb.Execute strSQL
32
33
 
33
34
  DoCmd.SetWarnings True '更新確認のメッセージをONにする

1

追記

2020/05/02 14:55

投稿

sazi
sazi

スコア25430

answer CHANGED
@@ -2,7 +2,9 @@
2
2
  FXDATA.accdb内のVBAで実行するなら、CurrentDbでの実行すればよいだけです。
3
3
 
4
4
  以下はSQLの実行をVBA内で行う場合です。
5
- 但し、それぞれのテーブルで[日付け]が一意キーである前提です
5
+ 但し、それぞれのテーブルで[日付け]が一意キーである前提。
6
+ 先ず、[日付け]が同じもの同士を更新。
7
+ 次に、USD_JPYの[日付け]がドル円にないものを追加
6
8
  ```VBA
7
9
  Private Sub newAndUpdate_Click()
8
10
 
@@ -11,6 +13,15 @@
11
13
  DoCmd.SetWarnings False '更新確認のメッセージをOFFにする
12
14
 
13
15
  strSQL = ""
16
+ strSQL = strSQL & "UPDATE ドル円 INNER JOIN USD_JPY ON ドル円.日付け=USD_JPY.日付け SET"
17
+ strSQL = strSQL & vbCrLf & " ドル円.終値=USD_JPY.終値"
18
+ strSQL = strSQL & vbCrLf & ",ドル円.始値=USD_JPY.始値"
19
+ strSQL = strSQL & vbCrLf & ",ドル円.高値=USD_JPY.高値"
20
+ strSQL = strSQL & vbCrLf & ",ドル円.安値=USD_JPY.安値"
21
+ strSQL = strSQL & vbCrLf & ",ドル円.[前日比%]=USD_JPY.[前日比%]"
22
+ CurrentDb.Execute strSQL
23
+
24
+ strSQL = ""
14
25
  strSQL = strSQL & "INSERT INTO ドル円("
15
26
  strSQL = strSQL & vbCrLf & " 日付け, 終値, 始値, 高値, 安値, [前日比%]"
16
27
  strSQL = strSQL & vbCrLf & ")"
@@ -19,15 +30,6 @@
19
30
  strSQL = strSQL & vbCrLf & "WHERE Not Exists(select 1 from ドル円 where 日付け=USD_JPY.日付け"
20
31
  CurrentDb.Execute strSQL
21
32
 
22
- strSQL = ""
23
- strSQL = strSQL & "UPDATE ドル円 INNER JOIN USD_JPY ON ドル円.日付け=USD_JPY.日付け SET"
24
- strSQL = strSQL & vbCrLf & " ドル円.終値=USD_JPY.終値"
25
- strSQL = strSQL & vbCrLf & ",ドル円.始値=USD_JPY.始値"
26
- strSQL = strSQL & vbCrLf & ",ドル円.高値=USD_JPY.高値"
27
- strSQL = strSQL & vbCrLf & ",ドル円.安値=USD_JPY.安値"
28
- strSQL = strSQL & vbCrLf & ",ドル円.[前日比%]=USD_JPY.[前日比%]"
29
- CurrentDb.Execute strSQL
30
-
31
33
  DoCmd.SetWarnings True '更新確認のメッセージをONにする
32
34
 
33
35
  End Sub