初心者で申し訳ないのですが、
accessでのSQLで、UPDATE,INSERT,DELETEを組み合わせた書き方がよくわかりません。
マスターとトランザクションで、
1 商品コードが被ったら更新、
2 マスター側に商品コードがなかったら追加、
3 商品コードが被ってるけど、追加するデータが入ってなかったら削除
というプログラムです。
まず、INSERTするとテーブルのデータが全て追加されてしまうので、
1行ずつ追加したいこと。
次に、Ifでrs_ans! rs_transaction!としてるので、毎回、OpenとCloseを繰り返さなければならないのか。
(現在ここでエラーになります・・・)
そもそもIf文ではなくUnionで書けないのか・・・
色々とおかしな部分があるかと思いますが、教えてください。お願いします。
SQL
1Sub Key() 2 3Dim cnn As ADODB.Connection 4 5Dim rs_master As ADODB.Recordset 6Dim rs_ans As ADODB.Recordset 7Dim rs_transaction As ADODB.Recordset 8Dim aSQL As String 9 10Set cnn = CurrentProject.Connection 11Set rs_master = New ADODB.Recordset 12Set rs_ans = New ADODB.Recordset 13Set rs_transaction = New ADODB.Recordset 14 15 16 rs_master.Open "master", cnn, adOpenKeyset, adLockOptimistic 17 rs_ans.Open "ans", cnn, adOpenKeyset, adLockOptimistic 18 19 Do Until rs_master.EOF 20 rs_ans.AddNew 21 22 rs_ans!商品コード = rs_master!商品コード 23 rs_ans!商品名 = rs_master!商品名 24 rs_ans!単価 = rs_master!単価 25 26 rs_ans.Update 27 rs_ans.MoveNext 28 rs_master.MoveNext 29 Loop 30 31 32 rs_transaction.Open "transaction", cnn, adOpenKeyset, adLockOptimistic 33 rs_ans.MoveFirst 34 35 Do Until rs_transaction.EOF 36 37 If rs_ans!商品コード = rs_transaction!商品コード Then 38 aSQL = "UPDATE ans SET ans.商品名 = '" & rs_transaction!商品名 & "', ans.単価 = " & rs_transaction!単価 & "" & _ 39 " WHERE ans.商品コード = " & rs_transaction!商品コード & "" 40 41 If rs_transaction!単価 = 0 And rs_transaction!商品名 Is Null Then 42 aSQL = "DELETE FROM ans" & _ 43 " WHERE (" & rs_transaction!単価 & " = 0) & (" & rs_transaction!商品名 & " IS NULL)" 44 End If 45 46 ElseIf rs_ans!商品コード <> rs_transaction!商品コード Then 47 aSQL = "INSERT INTO ans ( 商品コード, 商品名, 単価 ) SELECT transaction.商品コード, transaction.商品名, transaction.単価 " & _ 48 " FROM transaction WHERE ans.商品コード <> " & rs_transaction!商品コード & "" 49 50 End If 51 52 rs_ans.Close 53 rs_ans.Open aSQL, cnn, adOpenKeyset, adLockOptimistic 54 rs_transaction.MoveNext 55 Loop 56 57Set rs_ans = Nothing 58rs_master.Close: Set rs_master = Nothing 59rs_transaction.Close: Set rs_transaction = Nothing 60cnn.Close: Set cnn = Nothing 61 62End Sub
~追記~
masterにあるデータをtransactionのデータと比較して、処理し、
ansのテーブルに出力する流れです。
商品コード、商品名、単価が全てのテーブルにあります。
1度ansのテーブルにmasterのデータを全て書いて、
rs_ans!商品コード = rs_master!商品コード
rs_ans!商品名 = rs_master!商品名
rs_ans!単価 = rs_master!単価
( ↑のループ部分です。 )
それをtransactionのテーブルと比較し処理するのがいいかなと思っただけですので、
他によい方法があれば教えてください。