|
|
.Update を 使った ソースコードを紹介する表示色の説明:ASP VBScriptは <% 〜 %> キーワードは.Update です。
<%@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>Excel(*.xls)グラフ付雛形にADOで接続しデータ更新</title>
</head>
<body bgcolor=#ffffff text=#000000>
<h1 style="color:black;background-color:#e0ffe0">
Excel(*.xls)グラフ付雛形にADOで接続しデータ更新</h1>
<hr>
test057-1.asp<br>
ASPからADOを使用してExcel(*.xls)と接続して、<br>
.Updateでレコードを更新する。<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
'配列変数に集計値をまず入れます。
Dim PageCNT(10) '8個でいいんだけど
Dim dHIZUKE(10)
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'データアクセスにはJet.OLEDB.4.0を使うことを設定
db.Provider = "Microsoft.Jet.OLEDB.4.0"
'接続DBの位置は、Server.MapPathで変換して渡す
db.ConnectionString = Server.MapPath("cnt.mdb")
db.open 'やっとデータベースを開ける
'FORMAT関数を使用して、テーブル名logからデータを集計する
'SQL文を発行する
strSQL = "Select Format(WriteTime, 'YYYY/MM/DD') AS YYYYMMDD, Count(*) AS CNT"
strSQL = strSQL & " From log"
strSQL = strSQL & " Where WriteTime >= #" & DateAdd("d", -7, Date) & "#"
strSQL = strSQL & " GROUP BY Format(WriteTime, 'YYYY/MM/DD')"
'オマケで画面にデータ表示
Response.Write "<hr>発行する(した)SQL文は<br><B><font color='green'>"
Response.Write strSQL & "</font></B><br>です<hr>"
Set rs = db.Execute(strSQL)
'データの表示をテーブルで行う
Response.Write "<TABLE Border='1'>"
'見出しをバカっぽく、そのまま書き込む
Response.Write "<TR>"
Response.Write "<TD>NO.</TD>"
Response.Write "<TD>日付</TD>"
Response.Write "<TD>閲覧ページ数</TD>"
Response.Write "</TR>"
'EOFまでループ
nCNT = 1
Do While rs.EOF = False '.EOFがFalseの間
Response.Write "<TR>" '内容を表示する
Response.Write "<TD>" & nCNT & "</TD>"
Response.Write "<TD>" & rs.Fields("YYYYMMDD") & "</TD>"
Response.Write "<TD ALIGN='RIGHT'>" & rs.Fields("CNT") & "</TD>"
Response.Write "</TR>" & Chr(13) & Chr(10)
'配列変数に日付、カウント値を代入
dHIZUKE(nCNT) = rs.Fields("YYYYMMDD")
PageCNT(nCNT) = rs.Fields("CNT")
'次のレコードにポインタを移動する
rs.MoveNext 'これを忘れると悲惨なことに、、、
'カウンタを増やす
nCNT = nCNT + 1
Loop
Response.Write "</TABLE><HR>" 'テーブルは終わりです
'お行儀よくオブジェクトも開放しましょう
'今回同じ名前を使いまわしてみます、開放すれば大丈夫でしょう
rs.Close '開いていたレコードセットを閉じる
Set rs = Nothing
db.Close 'データベースも閉じようよ
Set db = Nothing
'---------------------
'ここからExcel側の処理
'---------------------
'ADO DB Connection オブジェクトを作成する、英文そのままじゃん
Set db=Server.CreateObject("ADODB.Connection")
'接続文字列作成、test057.xlsを指定する
strCon = "Provider=Microsoft.Jet.OLEDB.4.0;" & _
"Data Source=" & Server.MapPath("test057.xls") & ";" & _
"Extended Properties=Excel 8.0"
Response.Write "ExcelとのADO接続文字列は<br><b>"
Response.Write strCon & "</b><br>です<br>"
'データベース(xls)を開く
db.open strCon
Response.Write "その次はレコードセット<br>"
'ADO DB Recordset オブジェクトを作成する、英文そのままじゃん
Set rs=Server.CreateObject("ADODB.Recordset")
rs.CursorLocation = adUseServer 'カーソルはサーバーの指定
Response.Write "Select * from [DATA$A1:B9], db, 〜<br>"
rs.Open "Select * from [DATA$A1:B9]", db, adOpenStatic, adLockOptimistic
Response.Write "開いたレコードセットに対して.MoveFirst<br>"
rs.MoveFirst '先頭へ(A2:B2の行)
Response.Write "ループで配列からフィールド(セル)へセット<br>"
'ループ
For n = 1 To 8 '当日+一週間の7日で8回まわる
rs.Fields(0).Value = dHIZUKE(n)
rs.Fields(1).Value = PageCNT(n)
rs.Update '更新
rs.MoveNext '次のレコードへ(次の行へ)
Next
Response.Write "rs.Close でレコードセットを閉じる<br>"
rs.Close
Set rs = Nothing 'オブジェクト変数を開放する
Response.Write "db.Close でxlsとの接続を閉じる<br>"
db.Close
Set db = Nothing 'オブジェクト変数も開放する
%>
<hr>
集計値をtest057.xlsへ書き込みました<br>
[<a Href="test057.xls" TARGET="_blank">書き込んだtest057.xlsを開く</a>]<br>
↑書き込まれたデータの確認、グラフ付はOKか確認する<br>
↓下記が<b>Excel雛形</b>イメージです。<br>
<img src="http://www.ken3.org/backno/gif/asp057-01.gif"><br>
</body>
</html>
| 最近発売の雑誌を紹介する
仕事のじゃまにならない程度に・・・読んでみては? ※重たい雑誌は通販や近くのコンビニで?
|