元の三流解説は、
三流君ASP:Excelグラフ付の雛形シートにASPからADOを使用してデータセット
↑を見て、笑ってやってください。
ブログに過去のソースコードをアップして、ブログの検索機能で利用してます(利用予定です)
※古くさいコードが多いです・・・
ソースコード
<%@LANGUAGE=VBScript%> <html> <head> <title>Excel(*.xls)グラフ付雛形にADOで接続しデータ更新</title> </head> <body> <h2>Excel(*.xls)グラフ付雛形にADOで接続しデータ更新</h2> <!-- Ken3 --><!-- #include file="info.inc" --> 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> </body> </html>
↑をテスト実行する→http://www.ken3.org/cgi-bin/test/test057-1.asp← 実行する
↑コードの三流解説は、
三流君ASP:Excelグラフ付の雛形シートにASPからADOを使用してデータセット
を見て、笑ってやってください。
ASPの解説 トップページは
三流君ASPで遊ぶ、失敗する
です。こちらもよろしく・・・