|
|
ReadOnly=0 を 使った ソースコードを紹介する表示色の説明:ASP VBScriptは <% 〜 %> キーワードはReadOnly=0 です。
<%@LANGUAGE=VBScript%>
<% Response.CacheControl = "no-cache" %>
<% Response.AddHeader "Pragma", "no-cache" %>
<% Response.Expires = -1 %>
<html>
<head><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=x-sjis">
<title>ADOでReadOnly=0と.AddNewを使いCSVファイルにデータ追加</title>
</head>
<body>
<h1>ADOでReadOnly=0と.AddNewを使いCSVファイルにデータ追加</h1>
test091-1.asp<br>
ASPからADOを使用してテキストファイル(*.csv)に接続を行う<br>
ファイル名はtest091.csvで、データは,カンマで区切られてます。<br>
FID,書き込み時刻,IP情報,Reffer<br>
の4つの項目をCSVで管理してみます。<br>
大きな流れは、このASP(test091-1.asp)が実行されたら、<br>
最終行にカーソルを移動、.MovelastしてFID+1の次の番号を取得。
IPアドレスの頭10桁とReferrer(どこからきたか)を取り出し保存します。<br>
<br>
<hr>
<%
'---- CursorTypeEnum Values ----
Const adOpenForwardOnly = 0
Const adOpenKeyset = 1
Const adOpenDynamic = 2
Const adOpenStatic = 3
'---- LockTypeEnum Values ----
Const adLockReadOnly = 1
Const adLockPessimistic = 2
Const adLockOptimistic = 3
Const adLockBatchOptimistic = 4
'---- CursorLocationEnum Values ----
Const adUseServer = 2
Const adUseClient = 3
'※接続情報の作成 ドライバーの指定と、DBQには、パスのみを指定する
Con = "Driver={Microsoft Text Driver (*.txt; *.csv)};DBQ=" _
& Server.MapPath(".") & ";" _
& "ReadOnly=0;"
'SQLのテーブル名には、ファイル名を指定します(test091.csvを指定)
strSQL = "select * from test091.csv"
Response.Write "使用する接続文字列は<br>"
Response.Write "<STRONG><CODE>" & Con & "</CODE></STRONG><br>"
Response.Write "発行するSQL文字列は<br>"
Response.Write "<STRONG><CODE>" & strSQL & "</CODE></STRONG><hr>"
'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん
Set rs=Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = adUseServer 'カーソルはサーバーの指定
'接続文字列、SQLを渡して、レコードセットを開く
rs.Open strSQL, Con, adOpenDynamic, adLockOptimistic
'最終のデータを取得する
rs.MoveLast 'レコードを最終行へ移動
NEXT_NO = Cint(rs.Fields("FID").Value) + 1 '次の番号を+1して計算する
Response.Write "rs.MoveLastで取得したFIDは<b>"
Response.Write Cint(rs.Fields("FID").Value) & "</b>です+1します<br>"
'データを追加する
Response.Write "次は、開いたレコードセットに対して.AddNew<br>"
rs.AddNew
Response.Write "フィールドにアクセスする(データセットする)<br>"
'↓フィールド名でアクセス
rs.Fields("書き込み時刻").Value = Now()
rs.Fields("FID").Value = NEXT_NO '次の番号をセットする
'↓番号でフィールドにアクセスも出来るよ
rs.Fields(2).Value = "ADDR" & Left(Request.ServerVariables("REMOTE_ADDR"), 10)
rs.Fields(3).Value = Request.ServerVariables("HTTP_REFERER")
Response.Write ".Updateで更新(レコード確定)<br>"
rs.Update
rs.Close 'クローズして確定する
'再度レコードセットを作成する(表示用)
'top10で10件のデータとする FIDを降順にする そんなSQLを作成してみた
strSQL = "select top 10 * from test091.csv Order By FID DESC"
rs.Open strSQL, Con, adOpenForwardOnly '読み込みだけなのでForwardOnly
'先頭行へデータを移動する(無くてもよさそうですが)
rs.MoveFirst
'データの表示をテーブルで行う
Response.Write Request.ServerVariables("REMOTE_ADDR") & "←アナタのIP<br>"
Response.Write "test091.csv - " & strSQL & "<br><TABLE Border='1'>"
'見出しを(フィールド名を)そのまま書き込む
Response.Write "<TR>"
For Each fld_A In rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TH>" & fld_A.Name & "</TH>" '←.Nameでフィールド名
Next
Response.Write "</TR>"
'お約束のEOFまでループは(データが無くなるまでループ)、
Do While rs.EOF = False 'レコードセットの.EOFがFalseの間
Response.Write "<TR>" '内容を表示する
For Each fld_A In rs.Fields 'フィールドのアイテムに対してループ
Response.Write "<TD>" & fld_A.Value & "</TD>" '←.Valueでフィールドの値
Next
Response.Write "</TR>"
rs.MoveNext '次のレコードに移動する
Loop
Response.Write "</TABLE></SAMP>" 'テーブルは終わりです
'後始末
rs.Close '開いていたレコードセットを閉じる
'Set rs = Nothing 'お行儀よくオブジェクトも開放しましょう
%>
<hr>
[<a Href="test091-1.asp">再度テストでcsvへデータを追加する(再実行)</a>]
[<a Href="test091.csv" TARGET="_blank">
操作した結果のCSV test091.csvを確認(開く)</a>]<br>
</body>
</html>
| 商品:2ヶ月後の予約関係を紹介(広告)
4月の人気
-
01日 ワンピース 海賊無双(通常版)(初回特典:オリジナルカスタムテーマ9種DLコード、ソーシャルゲーム専用レアフィギュア用コード同梱) - GAME ほか
-
31日 カーズ おしゃべりケータイ - ベビー&マタニティ ほか
-
31日 (PS VITA用)巻き取りUSB充電ケーブル - GAME ほか
-
30日 Coleman(コールマン) フリースレジャーシートワイド カモフラージュ 2000010656 - スポーツ ほか
-
30日 マジック:ザ・ギャザリング デュエルデッキ 「ヴェンセール vs. コス」 日本語版 - おもちゃ ほか
-
30日 Another 限定版 第1巻 [Blu-ray] - DVDアニメ ほか
-
29日 三国志大戦トレーディングカードゲーム 第1弾 ブースターパック BOX - おもちゃ ほか
-
29日 アイドルマスター 6(完全生産限定版) [Blu-ray] - DVDアニメ ほか
続き(一覧)を見る
|