AccessVBAを学んでおります。
その中で
recordsetした値Aとrecordsetした値Bを比較して
一致すれば上書き、なければ新規追加という処理を考えました。
以下のコードです。
VBA
1Private Sub newAndUpdate_Click() 2 3 '値があれば比較、なければ更新をかける 4 Dim con As New ADODB.Connection 5 6 Dim strSQL As String 7 strSQL = "SELECT * FROM USD_JPY " 8 9 Dim adoRS1 As ADODB.Recordset 10 Set adoRS1 = New ADODB.Recordset 11 12 13 'testDBに入っている元データをレコードセットする 14 adoRS1.Open strSQL, CurrentProject.Connection, _ 15 adOpenDynamic, adLockOptimistic 16 17 '外部データベースに接続してレコードセットする 18 con.Open "Provider = Microsoft.ACE.OLEDB.12.0;" & _ 19 "Data Source = C:\Users\user\Documents\FXDATA.accdb" 20 21 Dim adoRS2 As ADODB.Recordset 22 Set adoRS2 = New ADODB.Recordset 23 adoRS2.Open "ドル円", con, adOpenDynamic, adLockOptimistic 24 25 'adoRS1でレコードセットした値を別のテーブルに代入する 26 Do Until adoRS1.EOF 27 adoRS2.MoveFirst 28 Do Until adoRS2.EOF 29 If adoRS1("日付け") <> adoRS2("日付け") Then 30 31 Debug.Print adoRS1("日付け") 32 Debug.Print adoRS2("日付け") 33 strSQL = "INSERT INTO ドル円(日付け,終値,始値,高値,安値,[前日比%]) " & _ 34 "IN 'C:\Users\user\Documents\FXDATA.accdb' " & _ 35 "VALUES('" & adoRS1("日付け") & "','" & adoRS1("終値") & "'," & _ 36 "'" & adoRS1("始値") & "','" & adoRS1("高値") & "'," & _ 37 "'" & adoRS1("安値") & "','" & adoRS1("前日比%") & "') " 38 39 Else 40 Debug.Print adoRS1("日付け") 41 42 43 strSQL = "UPDATE ドル円 " & _ 44 "IN 'C:\Users\user\Documents\FXDATA.accdb' " & _ 45 "SET 日付け = '" & adoRS1("日付け") & "'," & _ 46 "終値 = '" & adoRS1("終値") & "'," & _ 47 "始値 = '" & adoRS1("始値") & "'," & _ 48 "高値 = '" & adoRS1("高値") & "'," & _ 49 "安値 = '" & adoRS1("安値") & "'," & _ 50 "[前日比%] = '" & adoRS1("前日比%") & "' " 51 52 adoRS2.MoveNext 53 Exit Do 54 End If 55 adoRS2.MoveNext 56 57 Loop 58 59 CurrentDb.Execute strSQL 60 61 adoRS1.MoveNext 62 Loop 63 64End Sub
2重のループを考えたのですが、問題は
・adoRS2.MoveNextというものを書いたのですが、
adoRS2の方だけrecordが次へ送られない状態になりまして困っております。
adoRS1の方は普通に次のレコードに移動している。
試したこと
・デバッグでF8を押しながら一行ずつ確認、adoRS2.MoveNext行を通過後
イミディエイトウィンドウにて[?adoRS2("日付け")]と確認するも値の変更なし
・IF文の中にadoRS2.MoveNextを書いても値の変化無し、IFの外に書いても値の変化無し。
この原因についてお分かりになる方いらっしゃいましたら、ご教示願います。
よろしくお願いいたします。
【追記】
こちらのサイトからダウンロードしたデータをそのまま使用しております。
https://jp.investing.com/currencies/usd-jpy-historical-data
テーブル構造とデータはこのようになっており、日付けを起点にデータを比較して
更新分があれば上書き、なければ追加という処理を書きたいと考えております。
回答3件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/05/02 22:48
2020/05/03 14:19
2020/05/04 00:47
2020/05/04 00:56