このクラスは、より使いやすい walkmanxml データ キャッシュ クラスを利用しています。次のようにコードをコピーしてください。
<%
Rem XML キャッシュ クラス
'------------------------------------------------ - ------------------
「転載する場合は著作権情報を保持してください」
'作者: ╰⑥月の雨╮
'バージョン:ver1.0
このカテゴリは、walkmanxml データ キャッシュ クラスから教訓を引き出しており、より使いやすく、コミュニケーションと進歩を歓迎します。
'------------------------------------------------ - ------------------
クラスXmlCacheCls
Private m_DataConn 'データ ソース、開いている必要があります
Private m_CacheTime 'キャッシュ時間 (秒単位)、デフォルトは 10 分
プライベート m_XmlFile 'xml パス、絶対アドレスを使用、拡張子は不要
プライベート m_Sql 'SQL ステートメント
プライベート m_SQLArr '(読み取り専用) 返されたデータ配列
Private m_ReadOn '(読み取り専用) は、検出用の読み取りモード 1-データベース 2-xml を返します
'クラス属性==========================================
'データソース
パブリック プロパティ セット Conn(v)
m_DataConn = v を設定します
終了プロパティ
パブリック プロパティ Get Conn
接続 = m_DataConn
終了プロパティ
'キャッシュ時間
Public プロパティ Let CacheTime(v)
m_CacheTime = v
終了プロパティ
Public プロパティ Get CacheTime
キャッシュタイム = m_CacheTime
終了プロパティ
'xml パス、絶対アドレスを使用
Public プロパティ Let XmlFile(v)
m_XmlFile = v
終了プロパティ
Public プロパティ GetXmlFile
XmlFile = m_XmlFile
終了プロパティ
'SQL文
Public プロパティ Let Sql(v)
m_Sql = v
終了プロパティ
Public プロパティ Get SQL
SQL = m_Sql
終了プロパティ
'レコード配列を返す
Public プロパティ Get SQLArr
SQLArr = m_SQLArr
終了プロパティ
'読書モードに戻る
Public プロパティ Get ReadOn
ReadOn = m_ReadOn
終了プロパティ
「学級崩壊 =========================================
Private Sub Class_Initialize() 'クラスを初期化します
m_CacheTime=60*10 'デフォルトのキャッシュ時間は 10 分です
エンドサブ
Private Sub Class_Terminate() 'クラスを解放
エンドサブ
'クラスのパブリック メソッド =========================================
レムがデータを読み取る
パブリック関数 ReadData
If FSOExistsFile(m_XmlFile) then 'Xml キャッシュが存在するため、XML から直接読み取ります
XML からデータを読み取る
m_ReadOn=2
それ以外
ReadDataFromDB
m_ReadOn=1
終了の場合
終了機能
Rem は XML データを書き込みます
パブリック関数 WriteDataToXml
If FSOExistsFile(m_XmlFile) then 'xml の有効期限が切れていない場合は直接終了します
isXmlCacheExpired(m_XmlFile,m_CacheTime) でない場合は関数を終了します
終了の場合
ディムル
Dimxmlコンテンツ
ディムk
xmlcontent=
xmlcontent = xmlcontent & <?xml version=1.0coding=gb2312?> & vbnewline
xmlcontent = xmlcontent & <root> & vbnewline
k=0
Set Rs = Server.CreateObject(Adodb.Recordset)
Rs.open m_sql,m_DataConn,1
rs.eof ではない間
xmlcontent = xmlcontent & <item
rs.Fields の各フィールドについて
xmlcontent = xmlcontent & field.name & = & XMLStringEnCode(field.value) &
次
rs.movenext
k=k+1
xmlcontent = xmlcontent & ></item> & vbnewline
ウェン
rs.close
Setrs=なし
xmlcontent = xmlcontent & </root> & vbnewline
薄暗いフォルダーパス
フォルダーパス = Trim(left(m_XmlFile,InstrRev(m_XmlFile,/)-1))
CreateDIR(folderpath&) を呼び出します ' フォルダーを作成します
WriteStringToXMLFile m_XmlFile,xmlcontent
終了機能
'クラスのプライベート メソッド =========================================
Rem は XML ファイルからデータを読み取ります
プライベート関数 ReadDataFromXml
Dim SQLARR() '配列
Dim XmlDoc 'XmlDoc オブジェクト
Dim objNode '子ノード
Dim ItemsLength '子ノードの長さ
Dim AttributesLength '子ノードの属性の長さ
XmlDoc=Server.CreateObject(Microsoft.XMLDOM) を設定します。
XmlDoc.Async=False
XmlDoc.Load(m_XmlFile)
Set objNode=XmlDoc.documentElement 'ルートノードを取得します
ItemsLength=objNode.ChildNodes.length '子ノードの長さを取得します
items_i=0 から ItemsLength-1 まで
AttributesLength=objNode.childNodes(items_i).Attributes.length '子ノードの属性の長さを取得します
Attributes_i=0 から AttributesLength-1 まで
ReDim Preserve SQLARR(AttributesLength-1,items_i)
SQLArr(Attributes_i,items_i) = objNode.childNodes(items_i).Attributes(Attributes_i).Nodevalue
次
次
XmlDoc = なしを設定します
m_SQLArr = SQLARR
終了関数
レムはデータベースからデータを読み取ります
プライベート関数 ReadDataFromDB
ディムル
DimSQLARR()
ディムk
k=0
Set Rs = Server.CreateObject(Adodb.Recordset)
Rs.open m_sql,m_DataConn,1
そうでない場合 (rs.eof および rs.bof)
rs.eof ではない間
薄暗いフィールド長
fieldlegth = rs.Fields.count
ReDim Preserve SQLARR(fieldlegth,k)
ディム・フィールド
fieldi = 0 の場合 fieldlegth-1 へ
SQLArr(fieldi,k) = rs.Fields(fieldi).value
次
rs.movenext
k=k+1
ウェン
終了の場合
rs.close
Setrs=なし
m_SQLArr = SQLArr
終了機能
'クラスの補助プライベート メソッド ===========================================
Rem は XML ファイルを書き込みます
Private Sub WriteStringToXMLFile(filename,str)
ディム fs,ts
Set fs= createobject(scripting.filesystemobject)
IsObject(fs) でない場合は Sub を終了します
ts=fs.OpenTextFile(ファイル名,2,True)を設定します
ts.writeline(str)
ts.close
ts=何も設定しない
fs=何も設定しない
エンドサブ
Rem は XML キャッシュの有効期限が切れているかどうかを判断します
プライベート関数 isXmlCacheExpired(file,秒)
前回の薄暗いファイル
filelasttime = FSOGetFileLastModifiedTime(ファイル)
If DateAdd(s,seconds,filelasttime) < Now then
isXmlCacheExpired = True
それ以外
isXmlCacheExpired = False
終了の場合
終了関数
Rem はファイルの最終変更時刻を取得します
プライベート関数 FSOGetFileLastModifiedTime(ファイル)
ディム fso,f,s
fso=CreateObject(Scripting.FileSystemObject) を設定します。
f=fso.GetFile(ファイル) を設定します。
FSOGetFileLastModifiedTime = f.DateLastModified
f = 何も設定しない
fso = なしを設定します
終了関数
Remファイルが存在します
パブリック関数 FSOExistsFile(ファイル)
ディムfso
fso = Server.CreateObject(Scripting.FileSystemObject) を設定します。
fso.FileExists(file) の場合
FSOExistsFile = true
それ以外
FSOExistsFile = false
終了の場合
fso = 何も設定しない
終了機能
Rem XMLエスケープ文字
プライベート関数 XMLStringEnCode(str)
If str& = then XMLStringEnCode=:Exit 関数
str = 置換(str,<,<)
str = 置換(str,>,>)
str = 置換(str,',')
str = 置換(str,,)
str = 置換(str,&,&)
XMLStringEnCode = str
終了機能
レムがフォルダを作成
プライベート関数 CreateDIR(byval LocalPath)
エラー時は次へ再開
Dim i、FileObject、patharr、path_level、pathtmp、cpath
LocalPath = Replace(LocalPath,/,/)
FileObject =server.createobject(Scripting.FileSystemObject) を設定します。
patharr = Split(LocalPath,/)
path_level = UBound(patharr)
i = 0 の場合 path_level まで
i=0 の場合
pathtmp=patharr(0) & /
それ以外
pathtmp = pathtmp & patharr(i) & /
終了の場合
cpath = left(pathtmp,len(pathtmp)-1)
FileObject.FolderExists(cpath) がない場合
'Response.write cpath
FileObject.CreateFolder cpath
終了の場合
次
FileObject = なしを設定します
err.number<>0 の場合
CreateDIR = False
エラークリア
それ以外
CreateDIR = True
終了の場合
終了機能
終了クラス
'キャッシュを設定する
関数 SetCache(xmlFilePath,CacheTime,Conn,Sql)
セットキャッシュ=新しいXmlCacheCls
キャッシュを設定します。Conn=Conn
キャッシュ.XmlFile=xmlFilePath
キャッシュ.Sql=SQL
キャッシュ.キャッシュタイム=キャッシュタイム
キャッシュ.WriteDataToXml
キャッシュ = なしを設定します
終了機能
'読み取りキャッシュ
関数 ReadCache(xmlFilePath,Conn,Sql,ByRef ReadOn)
セットキャッシュ=新しいXmlCacheCls
キャッシュ.Conn=conn を設定します
キャッシュ.XmlFile=xmlFilePath
キャッシュ.Sql=SQL
キャッシュ.ReadData
ReadCache=cache.SQLArr
ReadOn=キャッシュ.ReadOn
終了機能
%>
使用方法:
1 データを XML にキャッシュする
コード:
次のようにコードをコピーします。
<!--#include file=Conn.asp-->
<!--#include file=Xml.asp-->
<%
セットキャッシュ=新しいXmlCacheCls
キャッシュ.Conn=conn を設定します
ache.XmlFile=Server.Mappath(xmlcache/index/Top.xml)
cache.Sql=tblProduction から上位 15 個の prod_id、prod_name、prod_uptime を選択します
キャッシュ.WriteDataToXml
%>
2 キャッシュされたデータの読み取り
コード:
次のようにコードをコピーします。
<!--#include file=Conn.asp-->
<!--#include file=Xml.asp-->
<%
セットキャッシュ=新しいXmlCacheCls
キャッシュ.Conn=conn を設定します
ache.XmlFile=Server.Mappath(xmlcache/index/Top.xml)
ache.Sql=prod_id asc による tblProduction 順序から上位 15 件の prod_id、prod_name、prod_uptime を選択します
キャッシュ.ReadData
rsArray=キャッシュ.SQLArr
isArray(rsArray) の場合
i=0 から ubound(rsArray,2) の場合
j=0 から ubound(rsArray,1) の場合
応答.Write(rsArray(j,i)&<br><br>)
次
次
終了する場合
%>キャッシュ時間。デフォルトの単位は秒単位で 10 分です。自分でキャッシュを設定することもできます。CacheTime=60*30 30 分