如何执行数据库里的ASP代码(HTML生成问题)

<%DimConnStrConnStr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath("2.... <%
Dim ConnStr
ConnStr = "Provider = Microsoft.Jet.OLEDB.4.0;Data Source = " & Server.MapPath("2.mdb")
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open ConnStr

OutHTML = GetLables(LoadFile("templates/index.htm"))
'OutHTML就是将要生成HTML字符串,以下的函数都是调用。

conn.close
Set conn = nothing

'LoadFile 函数是读取模板
Function LoadFile(ByVal Files)
Dim objStream,objFSO,FSO,TmpFSO
On Error Resume Next
Set objFSO = Server.CreateObject("Scripting.FileSystemObject")
If Err.Number<>0 Then
Response.Write "<Script>alert('提示\n\n非常遗憾,您的主机不支持FSO!');history.go(-1);</Script>"
Err.Clear
Response.End
Else
If objFSO.FileExists(Server.MapPath(Files)) Then
Set FSO = objFSO.OpenTextFile(Server.MapPath(Files),1,False)
LoadFile = FSO.Readall()
FSO.Close
Set FSO = Nothing
Else
Response.write "<Script>alert('提示\n\n打开文件时发生错误!请检查文件是否存在!\n\n文件名:" & Files & "');history.go(-1);</Script>"
Response.end
End If
End If
End Function

'这个读出所有{$XXXXXXXXXX$}标签,再根据标签名从数据库中找到相应的记录并替换。
Function GetLables(strContent)
On Error Resume Next
Dim objRegEx, MyLables, MyLable, o_MyLable, o_MyCode
Set objRegEx = New RegExp
objRegEx.IgnoreCase = true
objRegEx.Global = True
objRegEx.Pattern = "{\$[^<>]+?\$}"
Set MyLables = objRegEx.Execute(strContent)
For Each MyLable in MyLables
o_MyLable = MyLable.Value
o_MyCode = Split(MyLable.Value, "$")(1)
strContent = Replace(strContent, MyLable.Value, Replace_Lable_Content(o_MyCode))
Next
Set MyLables = Nothing
Set objRegEx = Nothing
GetLables = strContent
End Function

'从数据库中读取相应的记录。
Function Replace_Lable_Content(lable_code)
Dim TempStr
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT TOP 1 [Name],[Content] FROM [Lablel] WHERE [Lable_Code]='" & Lable_Code & "'"
rs.Open sql, conn, 1, 1
If Not rs.EOF Then
TempStr = rs("lable_content")
End If
rs.Close
Set rs = Nothing
Replace_Lable_Content = TempStr
End Function
%>
源代码如上

目的:
生成HTML

'数据库结构如下:
'结构 ID LabelName LabelContent
'记录 1 thisTime <%=Now()%>

疑难:上面我从数据库里读出的内容,都原封不动的换了,我怎么才能将<%=Now%>执行后再替换到字符串里呢?我要让我模板里的{$thisTime$}要替换成2007-8-13 12:25:36,而不要直接是{$=Now()$}。

肯求哪位高手帮忙,给个例子就更好了,如果调试成功,我还可以加分。
可能是我的意思没有表达清楚,不好意思。

现在执行结果是在HTML文件里出现的是从数据库里出来的{$=Now()$},而我要的结果是2007-8-13 12:25:36,当然,这个{$=Now()$}我只是一个例子,实际上可能要复杂得多,有可能是一段代码。
展开
 我来答
初照
2007-08-24
知道答主
回答量:6
采纳率:0%
帮助的人:0
展开全部
Dim conn
Set conn = Server.CreateObject("ADODB.Connection")
conn.Open ConnStr
Template = LoadFile("demo.html")
Template = Replace_DB_HTML_Labels(Template)
Template = Replace_DB_ASP_Labels(Template)
Template = Replace_Page_ASP_Labels(Template)
Response.write Template
conn.close
Set conn = nothing
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function Get_Labels_Content(lable_code)
Dim TempStr
Set rs = Server.CreateObject("ADODB.RecordSet")
sql = "SELECT top 1 [Content] FROM [Tags] WHERE [alies]='" & lable_code & "'"
rs.Open sql,conn, 1,1
If Not rs.EOF Then
TempStr = rs("Content")
End If
rs.Close
Set rs = Nothing
Get_Labels_Content = TempStr
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function RegExpTest(patrn, strng)
Dim regEx, Match, Matches
Set regEx = New RegExp
regEx.Pattern = patrn
regEx.IgnoreCase = False
regEx.Global = True
Set Matches = regEx.Execute(strng)
For Each Match in Matches
RetStr = RetStr & Match&"###"
Next
RegExpTest = RetStr
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function StaticTitle(str)
no=len(str)-2
StaticTitle=mid(str,2,no)
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function tempTitle(str)
no1=instr(str,"(")
tempTitle=mid(str,3,no1-3)
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function TempInfo(str)
n1=instr(str,"(")
n2=instr(str,")")
TempInfo=Mid(str,n1+1,n2-n1-1)
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function Replace_Page_ASP_Labels(str_P)
strinfo1 = RegExpTest("{![^<>]+?!}", str_P)
If strinfo1<>"" Then
arrinfo = Split(strinfo1,"###")
For i = 0 To Ubound(arrinfo)-1
If instr(arrinfo(i),"(")>0 Then
FunTitle=tempTitle(arrinfo(i))
arry=TempInfo(arrinfo(i))
'On Error Resume Next
str_P=Replace(str_P,arrinfo(i),Eval(FunTitle&"("&arry&")"))
Else
statitle=statictitle(arrinfo(i))
'On Error Resume Next
str_P=Replace(str_P,arrinfo(i),Eval(statitle))
End If
Next
End If
Replace_Page_ASP_Labels=str_P
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function Replace_DB_HTML_Labels(str_H)
' On Error Resume Next
Dim objRegEx, MyLables, MyLable, o_MyLable, o_MyCode
Set objRegEx = New RegExp
objRegEx.IgnoreCase = true
objRegEx.Global = True
objRegEx.Pattern = "{\$[^<>]+?\$}"
Set MyLables = objRegEx.Execute(str_H)
For Each MyLable in MyLables
o_MyLable = MyLable.Value
o_MyCode = Split(MyLable.Value, "$")(1)
str_H = Replace(str_H, MyLable.Value, Get_Labels_Content(o_MyCode))
Next
Set MyLables = Nothing
Set objRegEx = Nothing
Replace_DB_HTML_Labels = str_H
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Function Replace_DB_ASP_Labels(str_D)
Dim objRegEx, MyLables, MyLable, o_MyLable, o_MyCode
Set objRegEx = New RegExp
objRegEx.IgnoreCase = true
objRegEx.Global = True
objRegEx.Pattern = "{#\w+(\((\b[,0-9]+\b)?\))?#}"
Set MyLables = objRegEx.Execute(str_D)
For Each MyLable in MyLables
o_MyLable = MyLable.Value
o_MyCode = Split(MyLable.Value, "#")(1)
s_MyCode = Get_Labels_Content(o_MyCode)
str_D = Replace(str_D, MyLable.Value, Eval(s_MyCode))
Next
Set MyLables = Nothing
Set objRegEx = Nothing
Replace_DB_ASP_Labels = str_D
End Function
'^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
尘存2
2007-08-22 · TA获得超过297个赞
知道小有建树答主
回答量:600
采纳率:0%
帮助的人:421万
展开全部
........想要完美执行就我这个办法了

将数据库中的asp用fso输出为一个文件

执行这个文件不就得了 里面的函数/对象/过程一个不跑 全执行
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
茶苦亦觉甜
2007-08-13 · TA获得超过114个赞
知道小有建树答主
回答量:444
采纳率:0%
帮助的人:134万
展开全部
数据库取出来的时间本来就这个格式嗒,2007-8-13 12:25:36,你可以在数据库里面找找,比如convert(char(10),getdate(),120)之类的.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
youhongliang
2007-08-13 · 超过15用户采纳过TA的回答
知道答主
回答量:69
采纳率:0%
帮助的人:53.7万
展开全部
你可以去网站上查吗!也可以去问比你厉害的人啊!!!!
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式