ASP,VBSでAccessデータベース操作 SQL文でデータをAccessへ上書き(INSERT UPDATE SELECT)。

SQL文のINSERT INTO、UPDATE SET SELECT FROMを使用して、同じ値がある場所は上書き実行する。

ASPのSQL文でAccessへ書き込み、読み込みができたので、データの中で日付が同じだったら上書き実行するプログラムを作成する。

今回はINSERT INTO、UPDATE SET SELECT FROMを使用する。

SQLを実行する部分は下記となる。
ASPを動かす全てのソースはこちらからダウンロードしてください。

strtmp=Split(str,chr(10))
Set db=Server.CreateObject("ADODB.Connection")
db.Provider="Microsoft.Jet.OLEDB.4.0"
db.Mode=3
db.ConnectionString=Server.MapPath("kabu.mdb")
db.Open
SQL1="SELECT * FROM 日経 WHERE 日付=#"&strtmp(0)&"#"
Response.Write SQL1&"<br>"
Set rs=db.Execute(SQL1)
If rs.EOF Then
 SQL3="INSERT INTO 日経(日付,日経平均,NYダウ,ナスダック,ドル) VALUES(#"&strtmp(0)&"#,"&strtmp(1)&","&strtmp(2)&","&strtmp(3)&","&strtmp(4)&")"
 Response.Write SQL3&"<br>"
 db.Execute(SQL3)
Else
 SQL2="UPDATE 日経 SET 日経平均="&strtmp(1)&","&"NYダウ="&strtmp(2)&","&"ナスダック="&strtmp(3)&","&"ドル="&strtmp(4)&" WHERE 日付=#"&strtmp(0)&"#"
 Response.Write SQL2&"<br>"
 db.Execute(SQL2)
End If
rs.close
db.Close
Set db = Nothing

Accessの形式は以下の通り。
テーブル名:日経
ID(数値)、日付(日付/時刻型)、日経平均(数値)、NYダウ(数値)、ナスダック(数値)、ドル(数値)
55、2009/09/01、10500、9000、2000、95
・     ・      ・    ・   ・  ・
・     ・      ・    ・   ・  ・

データベースでAccessが使用できるようにする。
Set db=Server.CreateObject("ADODB.Connection")
db.Provider="Microsoft.Jet.OLEDB.4.0"

読み書き専用とする。
db.Mode=3

kabu.mdbファイルをオープンする。
db.ConnectionString=Server.MapPath("kabu.mdb")
db.Open


strtmp(0)〜strtmp(4)までに日付からドルまで入っているのだが、
Accessの日経テーブルで日付を検索し、今回書き込もうとしている日付strtmp(0)があるかチェックする(SELECT文)。
Response.Writeは実行したSQL文を表示。
SQL1="SELECT * FROM 日経 WHERE 日付=#"&strtmp(0)&"#"
Response.Write SQL1&"<br>"
Set rs=db.Execute(SQL1)

日付があればrsに行全てが入る。
日付がないかどうか判断するにはrs.EOFがtrue(1)で判断する。rsが終わり(EOF)であるかどうかを判断する。

If rs.EOF Then
@
Else
A
End If

日付がなければ、@の部分でINSERT INTOでstrtmp(0)〜strtmp(4)の値を日経テーブルに書き込む。
SQL2="INSERT INTO 日経(日付,日経平均,NYダウ,ナスダック,ドル) VALUES(#"&strtmp(0)&"#,"&strtmp(1)&","&strtmp(2)&","&strtmp(3)&","&strtmp(4)&")"
Response.Write SQL3&"<br>"
db.Execute(SQL3)

日付がなければAの部分でUPDATE SETで日経平均(数値)、NYダウ(数値)、ナスダック(数値)、ドル(数値)をUPDATEする。

SQL2="UPDATE 日経 SET 日経平均="&strtmp(1)&","&"NYダウ="&strtmp(2)&","&"ナスダック="&strtmp(3)&","&"ドル="&strtmp(4)&" WHERE 日付=#"&strtmp(0)&"#"
Response.Write SQL2&"<br>"
db.Execute(SQL2)

実際に書かれるSQL文は以下の通りとなる。

SELECT * FROM 日経 WHERE 日付=#2009/09/03#
UPDATE 日経 SET 日経平均=10214.64,NYダウ=9280.67,ナスダック=1967.07,ドル=92.42 WHERE 日付=#2009/09/03#

以上で、SELECTを使用して同じ日付があるかどうか確認し、あればUPDATE、なければINSERT INTOを使用して上書きする。

次はこのプログラムを応用して、同じ日付がある場合は書き込めないようにする。



実践!ASPでAccess操作