针对有网友说看不见文章内容, 现提示如下: 点击每一个标题行任一地方都会展开和隐藏此文章内容(不要点击标题). 目前展开隐藏功能只支持IE浏览器,虽然可以改成支持FF浏览器,不过现在一直没时间去弄,等有时间再修改了。 |
blog名称:乱闪Blog 日志总数:267 评论数量:1618 留言数量:-26 访问次数:2655059 建立时间:2005年1月1日 |
|

| |
Execute 设计防盗链
|
作者:DLL
On Error Resume Next Response.Buffer = True Response.Clear
Function UseStream(FileName) Dim FileStream,File Set FileStream = Server.CreateObject("ADODB.Stream") FileStream.Open FileStream.Type = 1 File = server.MapPath(FileName) FileStream.LoadFromFile(File) 'Response.ContentType = "application/octet-stream"
Response.BinaryWrite FileStream.Read Response.Flush
FileStream.Close Set FileStream = Nothing End Function
Dim Server_v1,Server_v2 Server_v1=Cstr(Request.ServerVariables("HTTP_REFERER")) Server_v2=Cstr(Request.ServerVariables("SERVER_NAME"))
If Server_v1<>"" And Mid(Server_v1,8,Len(Server_v2)) = Server_v2 Then FilePath = "../XBB2003DFSDADA/" & Request("FileName") Else FilePath = "../NoImg.gif" End If
DIm FileTypeName FileTypeName = Lcase(Split(Request("FileName"),".")(ubound(Split(Request("FileName"),"."))))
If Request("Type") = "" AND FileTypeName <> "jpg" Then Server.Execute(FilePath) If err.Number <> 0 Then Response.Clear err.Clear Response.Redirect("Image.asp?Type=UseStream&FileName=" & Request("FileName")) Response.End() End If Else UseStream(FilePath) If Err.Number <> 0 Then '当上面的方法出错时,使用stream对象输出图片 Err.Clear Response.Redirect("../NoImg2.gif") End If End If |
|
ASP高亮类
|
wyd1520 来源:动网论坛 此类高亮根据Editplus高亮来做的
Class Wyd_AspCodeHighLight Private RegEx Public Keyword,ObjectCommand,Strings,VBCode Public KeyWordColor,ObjectCommandColor,StringsColor,Comment,CodeColor Private Sub Class_Initialize() Set RegEx = New RegExp RegEx.IgnoreCase = True ' 设置是否区分字母的大小写 True 不区分。 RegEx.Global = True ' 设置全程性质。 KeyWordColor="#0000FF" ObjectCommandColor="#FF0000" StringsColor="#FF00FF" Comment="#008000" CodeColor="#993300" Keyword="Set|Private|If|Then|Sub|End|Function|For|Next|Do|While|Wend|True|False|Nothing|Class" '关建字 请自己添加 ObjectCommand="Left|Mid|Right|Int|Cint|Clng|String|Join|Array" '函数 请自己添加 VBCode="" End Sub Private Sub Class_Terminate() Set RegEx = Nothing End Sub Private Function M_Replace(Str,Pattern,Color) RegEx.Pattern = Pattern ' 设置模式。 M_Replace=RegEx.Replace(Str,"<font color="&Color&">$1</font>") End Function
Private Function String_Replace(Str,Pattern,Pattern1,Color,IsString) Dim Temp,RetStr RegEx.Pattern =Pattern1 Set Matches = RegEx.Execute(Str) For Each Match In Matches ' 遍历 Matches 集合 Temp=Re(Match.value) Str = Replace(Str,Match.value,Temp) Next RegEx.Pattern = Pattern ' 设置模式。 If IsString=1 Then String_Replace=RegEx.Replace(Str,"<font color="&Color&">"$1"</font>") Else String_Replace=RegEx.Replace(Str,"<font color="&Color&">$1</font>") End If End Function
Private Function Re(Str) Dim TRegEx,Temp Set TRegEx = New RegExp TRegEx.IgnoreCase = True ' 设置是否区分字母的大小写。 TRegEx.Global = True ' 设置全程性质。 TRegEx.Pattern="<.*?>" Temp=TRegEx.Replace(Str,"") Temp=Replace(Temp,"<","") Temp=Replace(Temp,">","") Re=Temp Set TRegEx=Nothing End Function Public Function MakeLi() Dim Temp If VBCode="" Then MakeLi="" Exit Function End If VBCode=HTMLEncode(VBCode) Temp=M_Replace(VBCode,"\b("&Keyword&")\b",KeyWordColor) Temp=M_Replace(Temp,"\b("&ObjEctCommand&")\b",ObjectCommandColor) Temp=String_Replace(Temp,"""(.*?)""","""(.*)(<.+?>)("&KeyWord&ObjectCommand&")+(<.+?>)(.*)""",StringsColor,1)' 字符串 Temp=String_Replace(Temp,"(('|rem).*)","'(.*)(<.+?>)("&KeyWord&ObjectCommand&")+(<.+?>)(.*)",Comment,0) '注释 MakeLi="<FONT COLOR="&CodeColor&">"&RepVbCrlf(Temp)&"</FONT>" End Function Public Function RepVbCrlf(fString) RepVbCrlf = Replace(fString, CHR(10), "<BR> ") End Function Public Function HTMLEncode(fString) If IsNull(fString) Or fString="" Then HTMLEncode="" Exit Function End If fString = replace(fString, ">", ">") fString = replace(fString, "<", "<") 'fString = Replace(fString, CHR(32), " ") 'fString = Replace(fString, CHR(9), " ") 'fString = Replace(fString, CHR(34), """) 'fString = Replace(fString, CHR(39), "'") 'fString = Replace(fString, CHR(13), "") 'fString = Replace(fString, CHR(10) & CHR(10), "</P><P> ") 'fString = Replace(fString, CHR(10), "<BR> ") HTMLEncode = fString End Function End Class
例子
star=timer() Set TT = New Wyd_AspCodeHighLight If Request("xx")<>"" Then TT.VBCode=Request("xx") Response.write TT.MakeLi() REsponse.write "<br>"&FormatNumber(timer()-star,2)*1000 Else
%> <FORM METHOD=POST action="Index2.asp"> <TEXTAREA NAME="xx" ROWS="30" COLS="80">Class Lih Private RegEx Public Keyword,ObjectCommand,Strings,VBCode Public KeyWordColor,ObjectCommandColor,StringsColor,Comment Private Sub Class_Initialize() Set RegEx = New RegExp KeyWordColor="#0000FF" ObjectCommandColor="#FF0000" StringsColor="#FF00FF" Comment="#008000" Keyword="If|End|For|Next|Function|Then|Do|While|Wend|Class" VBCode="" End Sub Private Sub Class_Terminate() Set RegEx = Nothing End Sub Private Function M_Replace(Str,Pattern,Color) RegEx.IgnoreCase = False ' 设置是否区分字母的大小写。 RegEx.Global = True ' 设置全程性质。 RegEx.Pattern = Pattern ' 设置模式。</TEXTAREA> <INPUT TYPE="submit" value=fff> </FORM> <%End If%>
|
|
ASP日历类
|
作者:Xinsoft 来源:LeadBBS 类代码:
<% Class Calendar
Public Lang Public DateVal
Public PrevYLink,NextYLink Public PrevMLink,NextMLink
'' Temp Var
Private pWeekdaysText
'' HTML Parameters
Public LinkStyleClass
Public Table_class Public Table_width Public Table_bgColor
Public Table_Title_style Public Table_Title_bgColor Private Table_Title_Text
Public tdBgColor_Light Public tdBgColor_Dark Public tdBgColor_Gray
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' '' meta functions '' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub Print( str ) Response.Write str & vbCrlf End Sub Private Sub Echo( str ) Response.Write str End Sub Private Sub EchoPara( str , val ) If ""<>""&val Then Response.Write " " & str & "="""& val &"""" End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' '' HTML functions '' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private Sub PrintTableHead Echo "<table" EchoPara "class" , Table_class EchoPara "width" , Table_width EchoPara "bgColor" , Table_bgColor Echo " cellSpacing=""1"" cellPadding=""1""" Echo " align=""center""" Echo " border=""0""" Print "><tbody>" End Sub Private Sub PrintTableTail Print "" Echo "</tbody></table>" End Sub Private Sub PrintTableTitle Print "<tr>" Echo "<td" EchoPara "style" , Table_Title_style EchoPara "bgColor" , Table_Title_bgColor EchoPara "colspan" , "7" Echo ">" Echo " <b>" & Table_Title_Text & "</b>" Print "</td>" Print "</tr>" End Sub
Private sub SetWeekdaysText_CHS() pWeekdaysText(0)="日" pWeekdaysText(1)="一" pWeekdaysText(2)="二" pWeekdaysText(3)="三" pWeekdaysText(4)="四" pWeekdaysText(5)="五" pWeekdaysText(6)="六" End Sub Private sub SetWeekdaysText_ENU() pWeekdaysText(0)="Su" pWeekdaysText(1)="M" pWeekdaysText(2)="Tu" pWeekdaysText(3)="W" pWeekdaysText(4)="Th" pWeekdaysText(5)="F" pWeekdaysText(6)="Sa" End sub Private sub SetWeekdaysText() Select Case Lang Case "CHS" : SetWeekdaysText_CHS Case "ENU" : SetWeekdaysText_ENU Case Else : SetWeekdaysText_ENU End select End Sub
Private function MonthText_CHS( monthval ) Dim Str If monthval<10 Then Str="0"&monthval Else Str=monthval End If MonthText_CHS=Str & "月" End function Private function MonthText_ENU( monthval ) Select Case ""&monthval Case "1" : MonthText_ENU="January" Case "2" : MonthText_ENU="February" Case "3" : MonthText_ENU="March" Case "4" : MonthText_ENU="April" Case "5" : MonthText_ENU="May" Case "6" : MonthText_ENU="June" Case "7" : MonthText_ENU="July" Case "8" : MonthText_ENU="August" Case "9" : MonthText_ENU="September" Case "10" : MonthText_ENU="October" Case "11" : MonthText_ENU="November" Case "12" : MonthText_ENU="December" End select End Function Private function MonthText( monthval ) Select Case Lang Case "CHS" : MonthText=MonthText_CHS( monthval ) Case Else : MonthText=MonthText_ENU( monthval ) End select End Function Private function YearText( yearval ) Select Case Lang Case "CHS" : YearText=yearval & "年" Case Else : YearText=yearval End select End function
Private sub SetTable_Title_Text() Dim monthval monthval=Month(DateVal) Dim yeartext yeartext=Year(DateVal) Select Case Lang Case "CHS" : yeartext=yeartext&"年" Case Else : yeartext=yeartext End Select Dim daytext daytext=Day(DateVal) If 10>daytext Then daytext="0" & daytext Select Case Lang Case "CHS" : Table_Title_Text=MonthText_CHS( monthval ) Case Else : Table_Title_Text=MonthText_ENU( monthval ) End Select Select Case Lang Case "CHS" : Table_Title_Text=yeartext & Table_Title_Text & daytext & "日" Case Else : Table_Title_Text=Table_Title_Text &" "& Day(DateVal) & " , " & yeartext End select End Sub
Private Sub PrintWeekdaysTR() Dim i Print "<tr>" For i=0 To 6 Echo "<td" EchoPara "align" , "center" EchoPara "valign" , "middle" EchoPara "bgColor" , tdBgColor_Dark Echo ">" Select Case Lang Case "CHS" : Echo pWeekdaysText(i) Case "ENU" : Echo "<b>" & pWeekdaysText(i) & "</b>" Case Else : Echo "<b>" & pWeekdaysText(i) & "</b>" End select Echo "</td>" Next Print "</tr>" End Sub
Private Sub PrintYMChooser() Dim M,Y M=Month(DateVal) Y=Year(DateVal) Print "<tr>" Echo "<td" EchoPara "align","center" EchoPara "valign","middle" EchoPara "bgColor",tdBgColor_Dark EchoPara "colspan","7" Echo ">" '' Year chooser Echo "<a" EchoPara "class",LinkStyleClass EchoPara "href",PrevYLink Echo ">" Echo "<span style=""FONT-FAMILY: webdings"">3</span></a><b>"& YearText(Y) &"</b>" Echo "<a" EchoPara "class",LinkStyleClass EchoPara "href",NextYLink Echo "</td>" Echo "<span style=""FONT-FAMILY: webdings"">4</span></a>" Echo " " '' Month chooser Echo "<a" EchoPara "class",LinkStyleClass EchoPara "href",PrevMLink Echo ">" Echo "<span style=""FONT-FAMILY: webdings"">3</span></a><b>"& MonthText(M) &"</b>" Echo "<a" EchoPara "class",LinkStyleClass EchoPara "href",NextMLink Echo "</td>" Echo "<span style=""FONT-FAMILY: webdings"">4</span></a>" Print "</tr>" End Sub
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''' '' '' Date Functions '' '''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
Private curY,curM,curD Private curM_BeginDateVal,curM_EndDateVal Private curM_DaysCount Private curM_BeginWeekday,curM_EndWeekday Private curM_Begin_LeftDays,curM_End_RightDays Private curM_TDCount,curM_Lines Private CellArray,CellX,CellY Public ItemDate Public ItemText Public ItemLink Public ItemBG
Public Function Idx2D_1D( x,y ) Idx2D_1D=CellX*y+x - curM_Begin_LeftDays If Idx2D_1D<0 Then Idx2D_1D=-1 If Idx2D_1D>=curM_DaysCount Then Idx2D_1D=-2 End function
Private Sub InitDatePara() curY=Year(DateVal) curM=Month(DateVal) curD=day(DateVal) curM_BeginDateVal=curY&"-"&curM&"-1" curM_EndDateVal=DateAdd( "m" , 1 , curM_BeginDateVal ) curM_EndDateVal=DateAdd( "d" ,-1 , curM_EndDateVal ) curM_DaysCount=DateDiff( "d" , curM_BeginDateVal , curM_EndDateVal )+1 curM_BeginWeekday =Weekday(curM_BeginDateVal , 1 ) curM_EndWeekday =Weekday(curM_EndDateVal , 1 ) curM_Begin_LeftDays =curM_BeginWeekday-1 curM_End_RightDays =7 - curM_EndWeekday curM_TDCount=curM_DaysCount + curM_Begin_LeftDays + curM_End_RightDays curM_Lines =curM_TDCount/7 CellX=7 CellY=curM_Lines ReDim CellArray( CellX,CellY ) ReDim ItemDate(curM_DaysCount) ReDim ItemText(curM_DaysCount) ReDim ItemLink(curM_DaysCount) ReDim ItemBG(curM_DaysCount) Dim i,j For i=0 To curM_DaysCount-1 ItemDate(i)=curY&"-"&curM&"-"&CStr(i+1) ItemText(i)=CStr(i+1) ItemLink(i)="" ItemBG(i) =tdBgColor_Light If curD=i+1 Then ItemBG(i)=tdBgColor_Gray Next End Sub
Property Let Date(g) DateVal=g InitDatePara End Property
Private Sub PrintDayTDs() Dim i,j Dim x For i=0 To CellY-1 Print "<tr>" For j=0 To CellX-1 x=Idx2D_1D(j,i) Echo "<td" EchoPara "style", "FONT-SIZE: 9px; FONT-FAMILY: sans-serif" EchoPara "align", "center" EchoPara "valign", "middle" If x>=0 Then EchoPara "bgColor", ItemBG(x) Else EchoPara "bgColor", "#ffffff" End if Echo ">" If x>=0 Then If ""=""&ItemLink(x) Then Echo x+1 Else Echo "<a" EchoPara "href",ItemLink(x) EchoPara "class",LinkStyleClass Echo ">" Echo x+1 Echo "</a>" End if Else Echo "<img width=""0"" height=""0"" />" End if Print "</td>" Next Print "</tr>" Next End sub
Private Sub Class_Initialize Lang="CHS" DateVal=Now InitDatePara PrevYLink="" NextYLink="" PrevMLink="" NextMLink="" LinkStyleClass="calendar" Table_class="caBox" Table_width="180" Table_bgColor="#c8ccc8" Table_Title_style="FONT-SIZE: 9px; COLOR: #ffffff; FONT-FAMILY: sans-serif" Table_Title_bgColor="#d56324" tdBgColor_Light="#ffffff" tdBgColor_Dark ="#f0f0f0" tdBgColor_Gray ="#efefef" ReDim pWeekdaysText(7) SetWeekdaysText End Sub Private Sub Class_Terminate End Sub
Public Sub Exec() PrintTableHead SetTable_Title_Text PrintTableTitle PrintWeekdaysTR PrintDayTDs PrintYMChooser PrintTableTail End sub
End class %> 调用方法:
<!-- #include file="calendar.asp" --> <style> TABLE.calendar { FONT-SIZE: 12px; COLOR: #949494; LINE-HEIGHT: 150%; FONT-FAMILY: "Verdana", "宋体" }
A.calendar:link { COLOR: #545454; TEXT-DECORATION: none } A.calendar:visited { COLOR: #545454; TEXT-DECORATION: none } A.calendar:hover { COLOR: #ffffff; BACKGROUND-COLOR: #66ccff; TEXT-DECORATION: underline } A.calendar:active { COLOR: #ffffff; BACKGROUND-COLOR: #66ccff; TEXT-DECORATION: underline }
A.cn { FONT-SIZE: 12px; FONT-FAMILY: Verdana,宋体 } A.cn:link { COLOR: #545454; TEXT-DECORATION: none } A.cn:visited { COLOR: #545454; TEXT-DECORATION: none } A.cn:hover { COLOR: #ffffff; BACKGROUND-COLOR: #66ccff; TEXT-DECORATION: underline } A.cn:active { COLOR: #ffffff; BACKGROUND-COLOR: #66ccff; TEXT-DECORATION: underline } .caBox { FONT-SIZE: 9px; COLOR: #686868; LINE-HEIGHT: 150%; FONT-FAMILY: "Verdana", "宋体" } .caBox A:link { COLOR: #33caea; TEXT-DECORATION: none } .caBox A:visited { COLOR: #33caea; TEXT-DECORATION: none } .caBox A:hover { COLOR: #000000; TEXT-DECORATION: none } .caBox A:active { COLOR: #000000; TEXT-DECORATION: none } </style>
<% Dim objCalendar,x Set objCalendar=New Calendar With objCalendar .Date=DateVal For i=0 To DateIDN-1 x=DateIDA(0,i) x=DateID2DateD(x)-1 .ItemLink(x)="datrep-" & ShowDateVal_Samply(DateID2DateYMD(DateIDA(0,i))) &"-" & ImgType & ".shtml" Next .PrevYLink=PrevYLink .NextYLink=NextYLink .PrevMLink=PrevMLink .NextMLink=NextMLink End With objCalendar.Exec Set objCalendar=Nothing %>
|
|
ASP+JavaScript+数据库 级联下拉菜单
|
<!-- *********************************** ASP+JavaScript+数据库 级联下拉菜单 *********************************** ****演示地址:http://www.jjst.com.cn/test/test.asp **** 以前都用JS的多级级联下拉菜单,但那个有局限性,每次更新列表项内容时都必须修改程序, 今天有空,写了这个数据库形式的,易于管理和修改,且你可以在此思路上建立更多级的级联菜单。 好了,废话少说,言归正传。 测试数据库:test.mdb 你可以自己建一个。 ----------------------------------------------------------------------------- 表名: 字段1 字段2 字段3 ----------------------------------------------------------------------------- 表1: big_class big_class_id big_class_name 表2: small_class small_class_id small_class_name belongto_big_class 数据类型 自动编号 文本 数字 ----------------------------------------------------------------------------- 以下是程序清单,共1个文件,文件名:test.asp --> <% 'option explicit dim conn,connstr,db db="test.mdb" '测试数据库 Set conn = Server.CreateObject("ADODB.Connection") connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath(""&db&"") conn.Open connstr %> <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>ASP+JavaScript+数据库 级联下拉菜单</title> <style> table{border: #00215a 1px dashed;} td{font-size:12px;} input,select{ font-size:9pt; border-style:solid; border-width:1; cursor:default; color:#03326B; background-color:#FFFFFF; height:16px; } a:link,a:visited{color: #000000;text-decoration: none;} a:hover {color: #ff0000;text-decoration: none;FILTER: glow(color=ffffff,strength=0) shadow(color=aaaaaa,direction:135); POSITION: relative; WIDTH: 100%;} </style> <script language="JavaScript"> function addbig(){ document.all.a.style.display="block"; document.all.b.style.display="none"; document.all.c.style.display="none"; } function addsmall(){ document.all.b.style.display="block"; document.all.a.style.display="none"; document.all.c.style.display="none"; } function viewmenu(){ document.all.a.style.display="none"; document.all.b.style.display="none"; document.all.c.style.display="block"; } </script> <% '从小类表中取出数据 set rs=server.CreateObject("adodb.recordset") sql="select * from small_class " rs.open sql,conn,1,1 %> <script language="JavaScript"> var num; //定义数组 var calArray=new Array(); <% dim j j=0 do while not rs.eof %> //将小类表中的所有相关记录存到数组calArray的对应元素中。 calArray[<%=j%>]=new Array("<%=rs("small_class_id")%>","<%=rs("small_class_name")%>","<%=rs("belongto_big_class")%>"); <% j=j+1 rs.movenext loop rs.close set rs=nothing %> //给num赋值为记录总数 num=<%=j%> function givevalue(myvalue){ /*当选择大类列表的值不为空时首先清空小类下拉列表的所有项目。不然小类列表中的项目会叠加的。 同时也是初始化 options 的值为0 */ document.form3.small_class_select.length = 0; //循环写出请求的大类所对应的小类。 for (i=0;i < num; i++) { if (calArray[i][2] == myvalue) { document.form3.small_class_select.options[document.form3.small_class_select.length] = new Option(calArray[i][1], calArray[i][0],"",""); /*定义新的Option对象并赋值。options的索引值从0开始。new Option对象有4个属性,对应分别是:文本串、value、defaultSelect、selected。在这里只用了第一个和第二个。*/ } } } </script> <script language="JavaScript"> function chk1(){ if (form1.big_class_name.value=="") { alert("请输入大类名称!"); form1.big_class_name.focus(); return false; } } function chk2(){ if (form2.small_class_name.value=="") { alert("请输入小类名称!"); form2.small_class_name.focus(); return false; } }
</script> </head>
<body background="background.jpg"> <% dim rs,sql,noclass select case request("action") case "addbigclass" addbigclass case "addsmallclass" addsmallclass end select %> <div align="center"></div> <table width="60%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr valign="middle"> <td height="48" colspan="3"> <div align="center"><font color="#999900"><b><font color="#FF0000">ASP</font>+<font color="#FF0000">JavaScript</font>+<font color="#FF0000">数据库</font> 级联下拉菜单</b></font></div></td> </tr> <tr> <td width="22%" height="21" valign="bottom"><a href="#" onClick="addbig()">添加大类</a> </td> <td width="22%" valign="bottom"><a href="#" onClick="addsmall()">添加小类</a></td> <td width="56%" valign="bottom"><a href="#" onClick="viewmenu()">预览效果</a></td> </tr> <tr> <td height="33" colspan="3" valign="top"> <hr align="left" width="60%" size="1" color="#999900"> </td> </tr> <tr> <td colspan="3" valign="top"> <div id="a" style="display:none"> <form name="form1" method="post" action="?action=addbigclass" onSubmit="return chk1()"> 大类名称: <input name="big_class_name" type="text" id="big_class_name" size="16"> <input type="submit" name="Submit" value=" 添 加 "> </form> </div> <div id="b" style="display:none"> <form name="form2" method="post" action="?action=addsmallclass" onSubmit="return chk2()"> 选择大类后添加小类: <select name="addselect"> <% set rs=server.CreateObject("adodb.recordset") sql="big_class" rs.open sql,conn,1,1 if rs.eof or rs.bof then %> <option selected>还没有添加大类</option> <% else do while not rs.eof %> <option value="<%=rs("big_class_id")%>"><%=trim(rs("big_class_name"))%></option> <% rs.movenext loop end if rs.close set rs=nothing %> </select> 小类名称: <input name="small_class_name" type="text" id="small_class_name" size="16"> <input type="submit" name="Submit2" value=" 添 加 "> </form> </div> <div id="c" style="display:block"> <form name="form3" method="post" action=""> <select name="big_class_select" onChange="givevalue(document.form3.big_class_select.options[document.form3.big_class_select.selectedIndex].value)"> <% dim firstid set rs=server.CreateObject("adodb.recordset") sql="select * from big_class order by big_class_id" rs.open sql,conn,1,1 if rs.eof or rs.bof then noclass=1 %> <option selected>还没有添加大类</option> <% else rs.movefirst firstid=rs("big_class_id") '在没有选择大类(页面刚载入)时要载入的大类。 %> <option value="<%=rs("big_class_id")%>" selected><%=trim(rs("big_class_name"))%></option> <% rs.movenext do while not rs.eof %> <option value="<%=rs("big_class_id")%>"><%=trim(rs("big_class_name"))%></option> <% rs.movenext loop end if rs.close set rs=nothing %> </select> <select name="small_class_select"> <%if noclass=1 then%> <option value="" selected>没有小类</option> <% else '在没有选择大类(页面刚载入)时要载入的小类,要跟默认的大类对应。 set rs=server.CreateObject("adodb.recordset") sql="select * from small_class where belongto_big_class="&firstid rs.open sql,conn,1,1 if rs.eof or rs.bof then %> <option value="" selected>没有小类</option> <% else do while not rs.eof %> <option value="<%=rs("small_class_id")%>"><%=trim(rs("small_class_name"))%></option> <% rs.movenext loop end if rs.close set rs=nothing end if %> </select> </form> </div></td> </tr> </table> <% sub addbigclass() set rs=server.CreateObject("adodb.recordset") sql="select * from big_class where big_class_name='"&trim(request("big_class_name"))&"'" rs.open sql,conn,1,3 if not(rs.eof and rs.bof) then response.Write("<script>alert('该大类已经存在!');</script>") else rs.addnew rs("big_class_name")=trim(request("big_class_name")) rs.update response.Write("<script>alert('大类添加成功!');self.location='test.asp?action=viewmenu';</script>") end if rs.close set rs=nothing end sub sub addsmallclass() set rs=server.CreateObject("adodb.recordset") sql="select * from small_class where small_class_name='"&trim(request("small_class_name"))&"' and belongto_big_class="&request("addselect") rs.open sql,conn,1,3 if not(rs.eof and rs.bof) then response.Write("<script>alert('该小类已经存在!');</script>") else rs.addnew rs("belongto_big_class")=request("addselect") rs("small_class_name")=trim(request("small_class_name")) rs.update response.Write("<script>alert('小类添加成功!');self.location='test.asp?action=viewmenu';</script>") end if rs.close set rs=nothing end sub conn.close set conn=nothing %> <table width="60%" border="0" align="center" cellpadding="0" cellspacing="0"> <tr> <td width="48%"> <div align="right">Copyright © </div></td> <td width="1%"> </td> <td width="11%"><b><a href="http://cooleasy.xicp.net/">酷易在线</a></b> </td> <td width="40%"><a href="mailto:xljxlj279@126.com">联系站长</a></td> </tr> </table> </body> </html>
|
|
无限级分类树型菜单
|
环境:ASP+ACCESS
'//----------List表定义 'Create Table List(ID AUTOINCREMENT,ParentID long,Title Text(50),Url Text(50),Flag bit,ChildNum Long,Target Text(10)) '-------------------------- --> <style Type=Text/Css> body,td{font-size:13px;} a:link { color: #442200; text-decoration: none} a:visited { color: #444400; text-decoration: none} a:hover { color: #442200; text-decoration: underline overline; background-color: #FFFF00} a.link1:link { color: #FF0000; text-decoration:none} a.link1:visited { color: #FF0000; text-decoration: none} a.link1:hover { color: #FF0000; text-decoration: none; background-color: #eeeeee} </Style> <!-- 有人问同一页面不同链接的不同风格怎么做,就是这里啦 -->
<!-- 添加节点表单 --> <div align="center" id=load style="display:none;position: absolute;"> <TABLE bgcolor=ffffee width=250 Style="border:1px solid #dd8888;"><FORM METHOD=POST ACTION="" name=form1> <tr><td align="center">添加节点</td></tr> <TR><TD align="center"> <INPUT TYPE="hidden" Name="ParentID"> 标题:<INPUT TYPE="text" NAME="Title"><BR> 链接:<INPUT TYPE="text" NAME="Url"><BR> 目标:<INPUT TYPE="text" NAME="Target" Style="width:70px"> <SELECT NAME="" Style="width:75px" OnChange="JavaScript:Target.value=this.options[this.selectedIndex].value;"> <!-- 有人问用下拉列表改变文本框的值怎么做,就是这里了 --> <option value="">Default</option> <option value="Right">Right</option> <option value="_black">_black</option> <option value="_Top">_Top</option> <option value="_parent">_parent</option> <option value="_self">_self</option> </SELECT> </td></tr><tr><td align="center"> <INPUT TYPE="submit" Name="提交" value="提交"> <INPUT TYPE="Button" onclick="JavaScript:load.style.display='none'" value="取消"> </TD> </TR></FORM> </TABLE> </div> <!-- 添加节点表单结束 -->
<% '连接数据库 set conn=server.createobject("ADODB.Connection") conn.open "provider=microsoft.jet.oledb.4.0;data source="&server.mappath("File.mdb")
'//----------操作分支 Action=Request("Action") Select Case Action Case "Add":If Request("ParentID")<>"" Then Add Case "Del": Del Case "Open":Open Case Else: End Select '//----------显示列表 Public List Set Rs=Conn.Execute("Select * From [List]") If Not Rs.Eof Then List =Rs.GetRows Max=Conn.Execute("Select Count(ParentID) From List Where ParentID=0")(0) Set Rs=Nothing Set Conn=Nothing CheckList 0,Max,"" Else Set Rs=Nothing Set Conn=Nothing End If Response.Write "<a href=# onclick='JavaScript:form1.action=""List.asp?action=Add"";form1.ParentID.value=0;load.style.left=(document.body.scrollWidth-300)/2;load.style.top=(document.body.scrollHeight)/2;load.style.display="""";'>添加根</a><BR>" '//------------显示列表函数 FuncTion CheckList(ParentID,Cs,Str1) Dim j j=0 For i=0 To Ubound(List,2) If List(1,i)=ParentID Then Response.write(Str1) If j<Cs-1 Then Str2="├" Else Str2="└" If List(5,i)>0 Then Str2="<a class=Link1 href='List.asp?action=Open&Id="&List(0,i)&"'>"&Str2&"</a>" If List(5,i)>0 And List(4,i)=False Then Str2="<b>"&Str2&"</b>" Response.Write(Str2)
Response.Write "<a Href='"&List(3,i)&"' target='"&List(6,i)&"'>"&List(2,i)&"</a> "&VBcrlf '添加节点链接 Response.Write "<a title='添加"&List(2,i)&"的子节点' href='#' onclick='JavaScript:add("&List(0,i)&");'>添加</a>"&Vbcrlf Response.Write "<a Title=""删除此节点"&VBCRLF&"此节点的子节点将向上递进一层!"" href='JavaScript:Del("&List(0,i)&");'>删除</a><BR>" If List(4,i)=True Then If j<Cs-1 Then CheckList List(0,i),List(5,i),Str1&"┆" Else CheckList List(0,i),List(5,i),Str1&" "'关键所在,递归调用 End If j=j+1 End IF Next End Function
'//-----------添加函数 Function Add Parent=CLng(Request("ParentID")) Title=Replace(Request("Title"),"'","''") Url=Replace(Request("URL"),"'","''") Target=Replace(Request("Target"),"'","''") If Title="" Or Url="" Then Response.Write "至少有一个必须参数没有指定值 <a href=List.asp>返回</a>" Response.End Exit Function End If Sql="Insert Into List (ParentID,Title,Url,Target) Values ("&Parent&",'"&Title&"','"&Url&"',' "&Target&"')" Conn.Execute(Sql) If Parent<>0 Then Sql="Update List Set ChildNum=ChildNum+1 Where ID="&Parent Conn.Execute(Sql) End IF End Function
'//-----切换节点状态 Function Open Sql="Update List Set Flag=Not Flag Where ID="&Clng(Request("Id")) Conn.Execute(Sql) End Function '//-----------删除节点 Function Del On Error Resume Next Id=Clng(Request("ID")) ParentID=Conn.Execute("Select ParentID From List Where ID="&ID)(0) Num=Conn.Execute("Select Count(ID) From List Where parentID="&ID)(0) Conn.Execute("Update List Set ChildNum=ChildNum-1+"&Num&" Where ID="&ParentID) Conn.Execute("Update List Set ParentID="&ParentID&" Where ID in (Select ID From List Where ParentID="&ID&")") Conn.Execute("Delete From List Where ID="&ID) If Err.Number<>0 Then Response.Write "您做的操作无效,可能是该项已经删除!! <a href=List.asp>返回</a>" Response.End End If End Function %> <SCRIPT LANGUAGE="JavaScript"> <!-- function add(ID) { form1.action='List.asp?action=Add'; form1.ParentID.value=ID; load.style.left=(document.body.scrollWidth-300)/2; load.style.top=(document.body.scrollHeight-100)/2; load.style.display="";//有人问控制层的隐显怎么做,就是这里啦 } function Del(ID) { if(confirm('删除此节点将使此节点的子节点向上递进一层\n确定要继续吗?')) {window.location.href='List.asp?Action=Del&Id='+ID;}//有人问删除确认怎么做,就是这里啦} //--> </SCRIPT>
-------------------------------------------------------------------------------- Create Table List(ID AUTOINCREMENT,ParentID long,Title Text(50),Url Text(50),Flag bit,ChildNum Long,Target Text(10))
直接在查询里执行就可以得到List表!!
下面是对表的说明
Id 自动编号 ParentID 长整形 Title 文本 Url 文本 Flag 布尔 ChildNum 长整形 Target 文本,允许空符串 |
|
ASP + XML + JavaScript 实现动态无限级联动菜单
|
作者:Jockey 来源:Jockey's Blog 结合ASP来完成对数据库值的读取,然后写入XML文件,再用JavaScript读出来并且控制它的联动。 这儿的关键是把数据库内的N层数据类读出来: 我的数据库表结构是这样的: 'tbl_Class 列名 数据类型 长度 说明 ClassID int 4 类ID ModuleID int 4 模块ID GroupID int 2 标识一个组 ClassName nvarchar 50 类别名称 ParentID int 2 连接到组(0表示是父类)
'##################我的ASP代码如下#################### '我把连接数据库的代码忽略。
'函数名字:OpenXml(FileName) '入口参数: filename 需要连接或打开的xml文件名 '返回值 :XmlDoc就是一个成功装载XML文档的对象了。 ' 有错误则打印错误信息strError '------------------------------------------------
function OpenXml(filename) dim strSourceFile ,XmlDoc,strError strSourceFile = filename Set XmlDoc = Server.CreateObject("Microsoft.XMLDOM") '创建XMLDOM实例 XmlDoc.async = false XmlDoc.load(strSourceFile) OpenXml=XmlDoc.parseerror.errorcode if XmlDoc.parseerror.errorcode<>0 then strError="<h2>error"&XmlDoc.parseerror.errorcode&"</h2>" strError=strError&XmlDoc.parseerror.reason&"<br>" strError=strError&XmlDoc.parseerror.url&"<br>" strError=strError&XmlDoc.parseerror.line&"<br>" strError=strError&XmlDoc.parseerror.filepos&"<br>" strError=strError&XmlDoc.parseerror.srcText&"<br>" response.write strError '输出错误 else set OpenXml=XmlDoc '返回实例 end if end function
'------------------------------------------------ '函数名字:CloseXml() '参数: XmlDoc XML组件实例 '------------------------------------------------ function CloseXml(XmlDoc) if IsObject(XmlDoc) then set XmlDoc=nothing end if end function
'------------------------------------------------ '函数名字:SelectXmlNode '参数:XmlDoc XML组件实例 ' e 元素的名字 '返回元素实例 '------------------------------------------------ function SelectXmlNode(XmlDoc,e) dim n
set n=XmlDoc.selectSingleNode("//" & e ) set selectXmlNode= n
end function
Dim n,np,MaxGroup,root,xmlDoc,nt,filename,s,ss,TorF filename=server.mappath("demo.xml") set xmlDoc=openXML(filename)'打开XML RemoveAllNodes xmlDoc,"Root"'把Root和它下面的子项清除,这样可以多次方便读写 set root= xmlDoc.createElement("Root") xmlDoc.appendChild root'创建一个顶层元素 sql="select Max(GroupID) from tbl_Class " '读出最大的层次 set rs=cn.execute(sql) if isnull(rs(0)) then MaxGroup=0 else MaxGroup=rs(0) '如果为null 表示没有数据 s="":ss="" set nt=xmldoc.createElement("item") nt.setAttribute "text", "请选择" root.appendChild nt '创建一个元素 for i=1 to MaxGroup '开始循环 sql="select * from tbl_Class where GroupID=" & i '由底层向顶层读取 set rs=cn.execute(sql) TorF=False '为了每一个层上都创建一个“请选择”的空取。 do while rs.eof =false '开始读取下层的数据 Set n = xmlDoc.createElement("item" & rs("ClassID")) '创建一个命名为item + ID号的标记元素 n.setAttribute "text",rs("ClassName")'把它的属性“text”设置为数据库表内的
ClassName n.setAttribute "value",rs("ClassID")'把它的属性“value”设置为数据库表内的
ClassID if rs("ParentID")>0 then '是有上层数据的 set np=selectXmlNode(xmlDoc,"item" & rs("ParentID")) '把它的上层数据元素先读出保存在np if TorF=false then '如果TorF为False值时 set nt=xmldoc.createElement("item") '创建一个元素保存在nt nt.setAttribute "text", "请选择"'把它的text属性设置为“请选择” np.appendChild nt 'np把它加为子元素 end if TorF=true '设置true np.appendChild n 'np 把n加为子元素 else root.appendChild n '如果是第一层数据就把它加入为root下的一个子元素 end if rs.movenext '下一条指针 loop ss=ss & "<SELECT id=Select" & i & " width=1 ></SELECT></span>" '每有一层就创建一个
<select> s=s & ",'Select" & i & "'" '把每个<select>的id 保存在变量s,它的格式为:id1,id2,id3,id4 next xmlDoc.save filename '正式保存Xml文件 CloseXml xmlDoc '关闭Xml文件 response.write ss '直接把<select>输出到文档 s=mid(s,2)
//在HTM文件内调用xmlselect.js <SCRIPT language=JavaScript src="xmlselect.js"></SCRIPT> <SCRIPT language=JavaScript> <!--//** power by fason function init() { var Sel = [<%=s%>]; attachSelect("demo.xml", Sel,["论坛导航"]); };//--> </SCRIPT> init();
//#########我把它的JS代码贴出来,作者叫:蒲佛信,http://fason.nease.net/samples/xmlselect/这儿有示例和代码。
//-----------------------------xmlselect.js文件开始-------------------------------
//-----------------------------------------------------/ // NichName :fason // Autho :Forbes Pu(蒲佛信) // Email :fason_pfx@hotmail.com // HomePage :http://fason.nease.net // Blog :http://blog.mvpcn.net/fason/ // http://blog.csdn.net/fason/ // // function :attachSelect(sXMLSrc, aSel[, sStore]) // param1 :sXMLSrc(URL of XML data source) // param2 :aSel(array of SELECT controls's ID) // param3 :array of default value when display //-----------------------------------------------------/
function attachSelect(sXMLSrc, aSel, sStore) { var oXML = CreateXmlDocument(); var oDocument = null; var store = sStore ? sStore : []; var Sel = new Array();
for (var i=0; i<aSel.length; i++) Sel[i] = document.getElementById(aSel[i]); if (!oXML){ throw new Error('Not support!\nplease install a XML parser');return; } oXML.onreadystatechange = function () { if (oXML.readyState == 4) { attachXML(); } }; oXML.load(sXMLSrc);
function CreateXmlDocument() { if (document.implementation && document.implementation.createDocument) { var doc = document.implementation.createDocument("", "", null); if (doc.readyState == null) { doc.readyState = 1; doc.addEventListener("load", function () { doc.readyState = 4; if (typeof doc.onreadystatechange == "function") doc.onreadystatechange(); }, false); } return doc; } else if (window.ActiveXObject) { var prefix = ["MSXML3","MSXML2","MSXML","Microsoft"]; for (var i=0;i<prefix.length;i++) { try { var doc = new ActiveXObject(prefix[i] +
".DomDocument"); doc.setProperty("SelectionLanguage","XPath"); return doc; } catch (e) {} } } return null; };
function attachXML() { oDocument = oXML.documentElement; if (!oDocument) { throw new Error('No XML data!'); return; } for (var i=0;i<aSel.length-1;i++){ addEvent(Sel[i], "onchange", function(x) { return function () { doChange(x); } }(i+1)); } doChange(0); };
function selectXMLNode(x) { var sPath = "/*"; var oDoc = oDocument; for (var i=0;i<x;i++) sPath += "/*[" + (Sel[i].selectedIndex+1) + "]"; if (typeof(oDoc.selectSingleNode)!='undefined') return
oDoc.selectSingleNode(sPath); else { var doc=oDoc.nodeType==9?oDoc:oDoc.ownerDocument; var res = doc.createNSResolver(oDoc.nodeType==9?
oDoc.documentElement:oDoc); return doc.evaluate(sPath,oDoc, res, 9, null).singleNodeValue; } };
function addEvent(el, sHandler, fnc) { if (el.attachEvent) { el.attachEvent(sHandler, fnc); } else if (el.addEventListener) { el.addEventListener(sHandler.replace(/on/i, ''), fnc, false); } else { el[sHandler] = fnc; } };
function doChange(n) { var el = selectXMLNode(n); var nodes = el ? el.childNodes :[]; var s = Sel[n]; var f = 0; if (nodes.length>0) { with (s){ length = 0; for (var i = 0,j = 0;i<nodes.length;i++) { if (nodes[i].nodeType!=1)continue; var t = nodes[i].getAttribute("text"); var v = nodes[i].getAttribute("value") ? nodes
[i].getAttribute("value") : t; if (v == store[n]) f = j; options[j++] = new Option(t, v); } options[f].selected = true; } if (++n<Sel.length) doChange(n); } else { for (var i=n; i<Sel.length; i++) { with (Sel[i]) { length = 0; options[0] = new Option('--'); options[0].selected = true; } } } }; };
//-----------------------------xmlselect.js文件结束-------------------------------
由于Xml的操作简便直接,使用起来得心应手。 |
|
将指定的asp文件内容生成HTML文件
|
<% Function GetPage(url) dim Retrieval Set Retrieval = CreateObject("Microsoft.XMLHTTP") With Retrieval .Open "Get", url, False ', "", "" .Send GetPage = BytesToBstr(.ResponseBody) End With Set Retrieval = Nothing End Function
Function BytesToBstr(body) dim objstream set objstream = Server.CreateObject("adodb.stream") objstream.Type = 1 objstream.Mode =3 objstream.Open objstream.Write body objstream.Position = 0 objstream.Type = 2 objstream.Charset = "GB2312" BytesToBstr = objstream.ReadText objstream.Close set objstream = nothing End Function on error resume next Url="http://www.taiang.com.cn/index.asp" response.write "开始更新首页..." wstr = GetPage(Url)
Set fs=Server.CreateObject("Scripting.FileSystemObject")
'if not MyFile.FolderExists(server.MapPath("/html/")) then 'MyFile.CreateFolder(server.MapPath("/html/"))' 'end if
If (fs.FileExists(server.MapPath("./")&"\index.htm")) Then fs.DeleteFile(server.MapPath("./")&"\index.htm") End If
Set CrFi=fs.CreateTextFile(server.MapPath("./")&"\index.htm") Crfi.Writeline(wstr) set CrFi=nothing set fs=nothing response.write "...<font color=red>更新完成!</font>" %> |
|
用ASP及VML实现股票走势图
|
作者:NB联盟-小竹 <HTML xmlns:v> <HEAD> <STYLE> v\:*{behavior:url(#default#VML);} *{font-size:12px} </STYLE> </HEAD> <BODY topmargin=0 leftmargin=0 bgcolor=#D7EEFF>
<DIV id=showdiv style="font-size:12px; Color:RED; DISPLAY: none; LEFT: 0px; PADDING-BOTTOM: 2px; PADDING-LEFT: 2px; PADDING-RIGHT: 2px; PADDING-TOP: 2px; POSITION: absolute; TABLE-LAYOUT: fixed; TOP: 0px; WHITE-SPACE: nowrap; Z-INDEX: 500"></DIV> <script language="javascript"> <!-- //加速alt,title的显示 var oldtext="abc";
function window.onload(){ try{myid2.height=window.document.body.scrollHeight} catch(e){} }
function document.onmousemove(){ try{ if(event.srcElement.getAttribute('onMOver')){ showdiv.style.left=event.x-3;showdiv.style.top=event.y+document.body.scrollTop+18;if(event.srcElement.onMOver!=oldtext){oldtext=event.srcElement.onMOver;showdiv.innerText=oldtext;showdiv.style.backgroundColor='#FFF6FF'};if(showdiv.style.display=='none')showdiv.style.display='' if(showdiv.style.posLeft+300>screen.width){showdiv.style.posLeft=520} } else{ if(showdiv.style.display=='')showdiv.style.display='none';} } catch(e){} } //--> </SCRIPT>
<?xml:namespace prefix=v /> <% '连接数据库 set conn=Server.CreateObject("Adodb.Connection") connStr="Provider=SQLOLEDB;Data Source=(local);database=DBName;uid=user;pwd=pass;" conn.Open connStr
'初始化,定义变量 BoardID=int(Request("BoardID")) if Request("BoardID")="" then BoardID=1 PicWidth=720 PicHeight=300
'显示股票列表下拉菜单 sql="Select * from Board where BoardID in (Select BoardID From Stocks)" set RsBoard=conn.execute(sql) StockStr="<select onchange=""location.replace('Trend.asp?BoardID='+this.value)"">" do while not RsBoard.eof if RsBoard("BoardID")=BoardID then ChkStr=" selected" else ChkStr="" end if StockStr=StockStr&"<option value="&RsBoard("BoardID")&ChkStr&">"&RsBoard("BoardName")&"</option>" RsBoard.movenext loop set RsBoard=nothing StockStr=StockStr&"<select>" response.write StockStr
'打开股票走势表 sql="Select * from StocksTrend where BoardID="&BoardID&" and CalTime>getDate()-1 and Day(CalTime)=Day(getDate()) order by ID" set rs=Server.CreateObject("Adodb.Recordset") rs.Open sql,conn,1,1
'获取股票价格列表至数组,并计算最高最低价 Rec=rs.RecordCount redim Price(Rec) Highest=0 Lowest=9999 for i=1 to Rec Price(i)=rs("Price") if Price(i)>Highest then Highest=Price(i) if Price(i)<Lowest then Lowest=Price(i) rs.movenext next set rs=nothing
'画时间点,间隔6小时 for i=0 to 24 step 6 X=Round(i/24*PicWidth) DrawLine X,PicHeight,X,PicHeight+5,"#808080" PrintWord X,PicHeight+15,i&":00" next
'画走势图边框 DrawLine 0,0,PicWidth,0,"#000000" DrawLine 0,0,0,PicHeight,"#000000" DrawLine PicWidth,0,PicWidth,PicHeight,"#000000" DrawLine 0,PicHeight,PicWidth,PicHeight,"#000000"
'画四等分线 DrawLine 0,PicHeight*1/4,PicWidth,PicHeight*1/4,"#AAAAAA" DrawLine 0,PicHeight*2/4,PicWidth,PicHeight*2/4,"#AAAAAA" DrawLine 0,PicHeight*3/4,PicWidth,PicHeight*3/4,"#AAAAAA"
'标明四等分线价格 PrintWord PicWidth+15, 0/4*PicHeight, FormatNumber(Highest-(Highest-Lowest)*0/4,2,-1,0,0) PrintWord PicWidth+15, 1/4*PicHeight, FormatNumber(Highest-(Highest-Lowest)*1/4,2,-1,0,0) PrintWord PicWidth+15, 2/4*PicHeight, FormatNumber(Highest-(Highest-Lowest)*2/4,2,-1,0,0) PrintWord PicWidth+15, 3/4*PicHeight, FormatNumber(Highest-(Highest-Lowest)*3/4,2,-1,0,0) PrintWord PicWidth+15, 4/4*PicHeight, FormatNumber(Highest-(Highest-Lowest)*4/4,2,-1,0,0)
'画走势图 for i=1 to Rec if i=1 then SX=0 SY=0 else SX=X SY=Y end if Y=PicHeight-Round((Price(i)-Lowest)/(Highest-Lowest)*PicHeight) X=Round((i-1)*5) DrawPrice SX,SY,X,Y,Price(i),"#000000" next
'自定义函数:画线 function DrawLine(SX,SY,X,Y,C) %><v:line style="POSITION:absolute;LEFT:10;TOP:10" from="<%=SX%>,<%=SY%>" to="<%=X%>,<%=Y%>" strokecolor="<%=C%>" strokeweight="1pt"></v:line><% response.write vbcrlf end function
'自定义函数:画线(带alt提示功能) function DrawPrice(SX,SY,X,Y,Price,C) %><v:line onMOver="<%=Price%>" style="POSITION:absolute;LEFT:10;TOP:10" from="<%=SX%>,<%=SY%>" to="<%=X%>,<%=Y%>" strokecolor="<%=C%>" strokeweight="1pt"></v:line><% response.write vbcrlf end function
'显示文本(默认红色) function PrintWord(X,Y,Word) %><SPAN style="LEFT:<%=X%>;TOP:<%=Y%>;COLOR:RED;FONT-FAMILY:宋体;POSITION:absolute"><%=Word%></SPAN><% response.write vbcrlf end function %> |
|
asp查询xml的代码,实现了无刷新、模糊查询功能
|
比较笨的办法,最好是先把数据存入xml文件再进行操作速度应该还要更快
<html> <head> <title>不刷新页面查询的方法</title> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> </head> <script language="javascript"> <!--初始化,将数据岛中数据装入列表框中--> function loadinsel() { var employeeid,employeelastname; //分别存放雇员ID和雇员名字 root=document.all.xmlemployees.childNodes.item(0); //返回第一个元素--employee for(i=0;i<root.childNodes.length;i++){ getnode=root.childNodes(i); //得到empolyee的一个子节点 employeeid=root.childNodes(i).getAttribute("emid");//得到雇员ID for(j=0;j<getnode.childNodes.length;j++){ employeeinf=getnode.childNodes(j).nodeName; if(employeeinf=="lastname"){ employeelastname=getnode.childNodes(j).text; //得到雇员名字 } } //将得到的employeeid和employeelastname写进select中 if(employeeid!="" && employeelastname!=""){ option1=document.createElement("option"); option1.text=employeelastname; option1.value=employeeid; employeelist.add(option1); } } } <!--初始化,从数据岛中检索数据,装入列表框中--> function findemployee(){ var employeelastname,employeeid; //分别存放雇员名字和雇员ID employeelastname=""; employeeid=""; findtext=window.findcontent.value; //得到检索条件 //清除列表框 employeecount=employeelist.length for(i=employeecount-1;i>=0;i--){ employeelist.remove(i); } root=window.xmlemployees.childNodes(0); for(i=0;i<root.childNodes.length;i++){ getitem=root.childNodes(i); //得到empolyee的一个子节点 employeeid=root.childNodes(i).getAttribute("emid"); //得到雇员ID for(j=0;j<getitem.childNodes.length;j++){ if(getitem.childNodes(j).nodeName=="lastname"){ employee_temp=getitem.childNodes(j).text; if(employee_temp.indexOf(findtext)!=-1){ //查找匹配项 employeelastname=employee_temp; //找到名字匹配的雇员 } }
} //将符合条件的雇员信息写进select中 if(employeeid!="" && employeelastname!=""){ option1=document.createElement("option"); option1.value=employeeid; option1.text=employeelastname; window.employeelist.add(option1); employeeid=""; employeelastname=""; } } } </script> <body bgcolor="#FFFFFF" text="#000000" onload="javascript:loadinsel()"> <table width="80%" border="1"> <tr> <td> 请输入查询条件: <input type="text" name="findcontent"> <input type="button" name="Submit" value="查找" onclick="javascript:findemployee()"> </td> </tr> <tr> <td> 查询结果: <select name="employeelist"> </select> </td> </tr> </table> <?xml version="1.0" encoding="gb2312"?> <% servername="wyb" '服务器名 user="sa" '用户名 pw="" '用户密码 databasename="northwind" '数据库名 set conn=server.CreateObject("adodb.connection") conn.Open "DRIVER=SQL Server;SERVER="&servername&";UID="&user&";pwd="&pw&";DATABASE="&databasename set rs=server.CreateObject("adodb.recordset") sql="Select employeeid,lastname from employees order by employeeid" rs.Open sql,conn%> <!--将数据库中信息放入数据岛中--> <xml id="xmlemployees"> <employee> <%do while not rs.eof%> <employeeitem emid="<%=rs("employeeid")%>"> <lastname><%=rs("lastname")%></lastname> </employeeitem> <%rs.movenext%> <%loop%> </employee> </xml> <%rs.close set rs=nothing %> </body> </html> |
|
Access 2000 数据库 80 万记录通用快速分页类
|
作者:未知 来源:xiaoyuehen 的 Blog 主要思路: 用一条语句统计(Count)出记录数(而不在查询时获得 RecordCount 属性), 缓存在 Cookies 中, 跳转时就不用再次统计. 使用 ADO 的 AbsolutePage 属性进行页面跳转即可. 为方便调用而写成类, 代码主要地方已有说明
硬件环境: AMD Athlon XP 2600+, 256 DDR 软件环境: MS Windows 2000 Advanced Server + IIS 5.0 + Access 2000 + IE 6.0 测试结果: 初次运行在 250(首页) - 400(末页)毫秒, (记录数缓存后)在页面间跳转稳定在 47 毫秒以下.第1页跳到最后一页不多于 350 毫秒
适用范围: 用于普通分页. 不适用于有较复杂的查询时: 如条件为"[Title] Like '%最爱%'", 查询的时间大大增加, 就算 Title 字段作了索引也没用. <%@LANGUAGE = "VBScript" CODEPAGE="936"%> <%Option Explicit%> <% Dim intDateStart intDateStart = Timer() Rem ## 打开数据库连接 Rem ################################################################# function f__OpenConn() Dim strDbPath Dim connstr strDbPath = "../db/test.mdb" connstr = "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" connstr = connstr & Server.MapPath(strDbPath) Set conn = Server.CreateObject("Adodb.Connection") conn.open connstr End function Rem ################################################################# Rem ## 关闭数据库连接 Rem ################################################################# function f__CloseConn() If IsObject(conn) Then conn.close End If Set conn = nothing End function Rem ################################################################# Rem 获得执行时间 Rem ################################################################# function getTimeOver(iflag) Dim tTimeOver If iflag = 1 Then tTimeOver = FormatNumber(Timer() - intDateStart, 6, true) getTimeOver = " 执行时间: " & tTimeOver & " 秒" Else tTimeOver = FormatNumber((Timer() - intDateStart) * 1000, 3, true) getTimeOver = " 执行时间: " & tTimeOver & " 毫秒" End If End function Rem ################################################################# Class Cls_PageView Private sbooInitState Private sstrCookiesName Private sstrPageUrl Private sstrPageVar Private sstrTableName Private sstrFieldsList Private sstrCondiction Private sstrOrderList Private sstrPrimaryKey Private sintRefresh Private sintRecordCount Private sintPageSize Private sintPageNow Private sintPageMax Private sobjConn Private sstrPageInfo Private Sub Class_Initialize Call ClearVars() End Sub Private Sub class_terminate() Set sobjConn = nothing End Sub Public Sub ClearVars() sbooInitState = False sstrCookiesName = "" sstrPageUrl = "" sstrPageVar = "page" sstrTableName = "" sstrFieldsList = "" sstrCondiction = "" sstrOrderList = "" sstrPrimaryKey = "" sintRefresh = 0 sintRecordCount = 0 sintPageSize = 0 sintPageNow = 0 sintPageMax = 0 End Sub Rem ## 保存记录数的 Cookies 变量 Public Property Let strCookiesName(Value) sstrCookiesName = Value End Property Rem ## 转向地址 Public Property Let strPageUrl(Value) sstrPageUrl = Value End Property Rem ## 表名 Public Property Let strTableName(Value) sstrTableName = Value End Property Rem ## 字段列表 Public Property Let strFieldsList(Value) sstrFieldsList = Value End Property Rem ## 查询条件 Public Property Let strCondiction(Value) If Value <> "" Then sstrCondiction = " WHERE " & Value Else sstrCondiction = "" End If End Property Rem ## 排序字段, 如: [ID] ASC, [CreateDateTime] DESC Public Property Let strOrderList(Value) If Value <> "" Then sstrOrderList = " ORDER BY " & Value Else sstrOrderList = "" End If End Property Rem ## 用于统计记录数的字段 Public Property Let strPrimaryKey(Value) sstrPrimaryKey = Value End Property Rem ## 每页显示的记录条数 Public Property Let intPageSize(Value) sintPageSize = toNum(Value, 20) End Property Rem ## 数据库连接对象 Public Property Let objConn(Value) Set sobjConn = Value End Property Rem ## 当前页 Public Property Let intPageNow(Value) sintPageNow = toNum(Value, 1) End Property Rem ## 页面参数 Public Property Let strPageVar(Value) sstrPageVar = Value End Property Rem ## 是否刷新. 1 为刷新, 其他值则不刷新 Public Property Let intRefresh(Value) sintRefresh = toNum(Value, 0) End Property Rem ## 获得当前页 Public Property Get intPageNow() intPageNow = singPageNow End Property Rem ## 分页信息 Public Property Get strPageInfo() strPageInfo = sstrPageInfo End Property Rem ## 取得记录集, 二维数组或字串, 在进行循环输出时必须用 IsArray() 判断 Public Property Get arrRecordInfo() If Not sbooInitState Then Exit Property End If Dim rs, sql sql = "SELECT " & sstrFieldsList & _ " FROM " & sstrTableName & _ sstrCondiction & _ sstrOrderList Set rs = Server.CreateObject("Adodb.RecordSet") rs.open sql, sobjConn, 1, 1 If Not(rs.eof or rs.bof) Then rs.PageSize = sintPageSize rs.AbsolutePage = sintPageNow If Not(rs.eof or rs.bof) Then arrRecordInfo = rs.getrows(sintPageSize) Else arrRecordInfo = "" End If Else arrRecordInfo = "" End If rs.close Set rs = nothing End Property Rem ## 初始化记录数 Private Sub InitRecordCount() sintRecordCount = 0 If Not(sbooInitState) Then Exit Sub Dim sintTmp sintTmp = toNum(request.Cookies("_xp_" & sstrCookiesName), -1) If ((sintTmp < 0) Or (sintRefresh = 1))Then Dim sql, rs sql = "SELECT COUNT(" & sstrPrimaryKey & ")" & _ " FROM " & sstrTableName & _ sstrCondiction Set rs = sobjConn.execute(sql) If rs.eof or rs.bof Then sintTmp = 0 Else sintTmp = rs(0) End If sintRecordCount = sintTmp response.Cookies("_xp_" & sstrCookiesName) = sintTmp Else sintRecordCount = sintTmp End If End Sub Rem ## 初始化分页信息 Private Sub InitPageInfo() sstrPageInfo = "" If Not(sbooInitState) Then Exit Sub Dim surl surl = sstrPageUrl If Instr(1, surl, "?", 1) > 0 Then surl = surl & "&" & sstrPageVar & "=" Else surl = surl & "?" & sstrPageVar & "=" End If If sintPageNow <= 0 Then sintPageNow = 1 If sintRecordCount mod sintPageSize = 0 Then sintPageMax = sintRecordCount \ sintPageSize Else sintPageMax = sintRecordCount \ sintPageSize + 1 End If If sintPageNow > sintPageMax Then sintPageNow = sintPageMax If sintPageNow <= 1 then sstrPageInfo = "首页 上一页" Else sstrPageInfo = sstrPageInfo & " <a href=""" & surl & "1"">首页</a>" sstrPageInfo = sstrPageInfo & " <a href=""" & surl & (sintPageNow - 1) & """>上一页</a>" End If If sintPageMax - sintPageNow < 1 then sstrPageInfo = sstrPageInfo & " 下一页 末页 " Else sstrPageInfo = sstrPageInfo & " <a href=""" & surl & (sintPageNow + 1) & """>下一页</a> " sstrPageInfo = sstrPageInfo & " <a href=""" & surl & sintPageMax & """>末页</a> " End If sstrPageInfo = sstrPageInfo & " 页次:<strong><font color=""#990000"">" & sintPageNow & "</font> / " & sintPageMax & " </strong>" sstrPageInfo = sstrPageInfo & " 共 <strong>" & sintRecordCount & "</strong> 条记录 <strong>" & sintPageSize & "</strong> 条/页 " End Sub Rem ## 长整数转换 Private function toNum(s, Default) s = s & "" If s <> "" And IsNumeric(s) Then toNum = CLng(s) Else toNum = Default End If End function Rem ## 类初始化 Public Sub InitClass() sbooInitState = True If Not(IsObject(sobjConn)) Then sbooInitState = False Call InitRecordCount() Call InitPageInfo() End Sub End Class Dim strLocalUrl strLocalUrl = request.ServerVariables("SCRIPT_NAME") Dim intPageNow intPageNow = request.QueryString("page") Dim intPageSize, strPageInfo intPageSize = 30 Dim arrRecordInfo, i Dim Conn f__OpenConn Dim clsRecordInfo Set clsRecordInfo = New Cls_PageView clsRecordInfo.strTableName = "[myTable]" clsRecordInfo.strPageUrl = strLocalUrl clsRecordInfo.strFieldsList = "[ID], [Title], [LastTime]" clsRecordInfo.strCondiction = "[ID] < 10000" clsRecordInfo.strOrderList = "[ID] ASC" clsRecordInfo.strPrimaryKey = "[ID]" clsRecordInfo.intPageSize = 20 clsRecordInfo.intPageNow = intPageNow clsRecordInfo.strCookiesName = "RecordCount" clsRecordInfo.strPageVar = "page" clsRecordInfo.intRefresh = 0 clsRecordInfo.objConn = Conn clsRecordInfo.InitClass arrRecordInfo = clsRecordInfo.arrRecordInfo strPageInfo = clsRecordInfo.strPageInfo Set clsRecordInfo = nothing f__CloseConn %> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=gb2312"> <title>分页测试</title> <style type="text/css"> <!-- .PageView { font-size: 12px; } .PageView td { border-right-style: solid; border-bottom-style: solid; border-right-color: #E0E0E0; border-bottom-color: #E0E0E0; border-right-width: 1px; border-bottom-width: 1px; } .PageView table { border-left-style: solid; border-top-style: solid; border-left-color: #E0E0E0; border-top-color: #E0E0E0; border-top-width: 1px; border-left-width: 1px; } tr.Header { background: #EFF7FF; font-size: 14px; font-weight: bold; line-height: 120%; text-align: center; } --> </style> <style type="text/css"> <!-- body { font-size: 12px; } a:link { color: #993300; text-decoration: none; } a:visited { color: #003366; text-decoration: none; } a:hover { color: #0066CC; text-decoration: underline; } a:active { color: #000000; text-decoration: none; } table { font-size: 12px; } --> </style> </head> <body> <table width="100%" border="0" cellspacing="0" cellpadding="4"> <tr> <td> <%= strPageInfo%></td> </tr> </table> <div class="PageView"> <table width="100%" border="0" cellspacing="0" cellpadding="4"> <tr class="Header"> <td>ID</td> <td>描述</td> <td>日期</td> </tr> <% If IsArray(arrRecordInfo) Then For i = 0 to UBound(arrRecordInfo, 2) %> <tr> <td> <%= arrRecordInfo(0, i)%></td> <td> <%= arrRecordInfo(1, i)%></td> <td> <%= arrRecordInfo(2, i)%></td> </tr> <% Next End If %> </table> </div> <table width="100%" border="0" cellspacing="0" cellpadding="4"> <tr> <td> <%= strPageInfo%></td> </tr> </table> <table width="100%" border="0" cellspacing="0" cellpadding="4"> <tr> <td align="center"> <%= getTimeOver(1)%></td> </tr> </table> </body> </html> |
|
不刷新页面的情况下调用ASP
|
RS技术的一个具体例子 在前面的帖子中,我介绍了RS的基本工作原理,显然如果将RS技术运用在一个网站的设计中将会有很多非凡的作用(尤其是它的那个最大的优点,可以在不刷新页面的情况下调用服务端的代码)。正是因为这个特点,你就可以象在编写一个传统的C/S模式的程序一样,对数据库的数据进行处理了(我想大家一定很想知道具体应该如何来实现了,下面将给出一个具体的例子,调试这个破程序几乎快把我给累死,呵呵。) 从前面的描述可以看到,要使用RS技术就需要客户端和服务端满足下面两个条件:
1。客户端只需要支持Java applet即可
2。而服务端只需要支持ASP即可 换句话说,就是RS技术是完全独立与浏览器的(当然浏览器至少需要满足支持Java和JavaScript),你可以在IE中使用,也可以完全在NC中使用,这也是区别与RDS技术的一个显著特点。 在能够灵活运用RS技术前,先要说明一个问题,就是前面也曾经提到过的“异步调用”的问题。也正是因为有异步调用,才能够实现你只刷新页面的某一部分而不用刷新整个页面。 由于它的这个特点,你可以让服务端来实现在你浏览页面的同时对你输入数据的合法性检查(当然这可以是一系列很复杂的合法性检查,例如需要将用户输入的数据和数据库内已有的数据进行对比等,这个可不是客户端的JS能够解决的),然后当服务端返回检查结果后,你再进行相应的操作(例如弹出一个对话框告诉用户输入出错等等).异步调用时的语法如下:
RSExecute(serverURL, functionname, param_list)
第一个参数是你想调用的asp页面的完整的URL路径
第二个参数是你想调用函数的名称
后面的就是该函数需要的输入参数了 如果你想调用的函数需要两个输入参数的话,就是这样的写法:
RSExecute(serverURL, functionname, f_arg_1, f_arg_2)
当进行调用时有两种写法,
一种是有返回结果的调用方式:
objResult = RSExecute(serverURL, functionname, f_arg_1, f_arg_2);
另外一种则是没有返回结果的调用方式:
RSExecute(url, func_name, f_arg_1, f_arg_2, CallbackFunction);
这种调用方式要特别的注意,其中的CallbackFunction是客户端的一个JS函数它表示一但RS执行完毕服务端上的调用,就会马上调用这个函数,并把结果返回到这个函数中去。
一个典型的CallbackFunction函数应该是这样的结构:
function CallbackFunction(objResult) { //你自己的处理过程 }
其中唯一的输入参数objResult就是RS调用的返回值.
下面我们假设这样一种情况:
用户在浏览器中输入了用户的e-mail地址,然后用户离开了e-mail地址输入框进入接下来的输入过程,这个时候就是RS该上场了,它根据用户输入的地址在服务端的数据库中查询这个地址,就可以判断出这个用户是否已经存在,然后把结果返回给客户端,在客户端再使用DHTML技术在一个叫"ShowResult"的输入框里面提示用户以前输入的信息。
function CallbackFunc(objResult) { // 提示用户的信息 window[objResult.context].value = objResult.return_value; } 而RSExecute()应该这么调用RSExecute(serverURL, functionname, f_arg_1, CallbackFunc,
"ShowResult");
不说了,不说了,上面罗嗦了这么多,我想大家也都看得头大了,下面还是让具体的代码来发言把:
(请在使用代码前在你的服务器上建立一个叫NW的系统DSN文件,该文件使用了Northworld即中文ACCESS97自带的示例数据库)
下面的例子是这么进行的,default.htm中分为两祯,在main.html页面中使用了RS技术,大家可以注意到在main.html中没有使用到submit所以如果你在该页面中直接敲回车键的话什么都不会出现,你必须通过鼠标单击那个"获取信息"按扭来使用这个局部页面刷新技术。在单击完该按扭后,页面会有一段小小的延迟(这段时间内java applet在后台建立了和服务端的连接)然后马上页面回复正常的鼠标,你可以在该页面中继续进行其他的操作。而不必象普通页面刷新时,你只有等待数据。而info.asp大家一眼就能够看明白,其实就是一个很简单的处理字符串的程序。
如果大家要是对DHTML技术熟悉的话,完全可以在客户端完成这些操作。至于EmpData.asp就是服务端处理数据的程序了。好了,其中的好处大家可以自己去体会。
特别注意,不要改变太多代码,不然很容易出错,毕竟是在使用JavaScript编程.
Default.htm文件代码如下: <HTML> <HEAD> <TITLE>RS技术的实现例子</TITLE> </HEAD> <FRAMESET id=fset rows="70%,30%"> <FRAME name=main src="main.html"> <FRAME name=info src="info.asp"> </FRAMESET> </HTML>
Maim.html文件代码如下 <HTML> <HEAD> <TITLE>RS技术的实现例子</TITLE> </HEAD> <BODY> <script language="JavaScript" src="http://YourServer/_ScriptLibrary/rs.htm"></script> <script language="JavaScript"> RSEnableRemoteScripting("http://YourServer/_ScriptLibrary"); </script> <h1>雇员信息</h1> <hr> <form name=MyForm> 请输入你想查询的名字: <br><input type=text name="empLastName" size=40> <input type=button name=btnExecute style="width=150" value="获取信息" onclick="execAsynch(empLastName.value)"> </form> <hr>
<SCRIPT LANGUAGE="javascript"> var serverURL = "http://yourserver/"; var pageURL = "/batman/EmpData.asp"; function refreshPage(co) { if (co.status != 0) { alert("发生异常错误\n" + message); } strText = co.return_value; top.info.location = "info.asp?info=" + escape(strText); } function execAsynch(empLastName) { RSExecute(serverURL+pageURL, "GetEmpInfoAsArray", empLastName, refreshPage); } </SCRIPT> </BODY> </HTML>
info.asp文件代码 <HTML> <BODY> <% Response.Write Request.ServerVariables("REMOTE_USER") strText = Request.QueryString("info") If strText = "" Then Response.End arrData = split(strText, "|") arrLabels = split("职工,头衔,城市,雇佣日期", ",") %> <table border=0> <% for i=0 to 3 Response.Write "<tr>" Response.Write "<td><b>" & arrLabels(i) & "</b></td>" Response.Write "<td><i>" & arrData(i) & "</i></td>" next %> </table> </BODY> </HTML>
EmpData.asp文件 <%@ LANGUAGE=VBSCRIPT %> <% RSDispatch %>
<SCRIPT RUNAT=SERVER Language=javascript> <!--#INCLUDE VIRTUAL="/_ScriptLibrary/RS.ASP"-->
function Description() { this.GetEmpInfoAsArray = DoGetData; } public_description = new Description();
function DoGetData(empName) { sql = "select * from 雇员 where [名字]="" + empName + """; rst = new ActiveXObject("ADODB.Recordset"); rst.CursorLocation = 3; rst.Open(sql, "NW"); i = 0; strText = ""; if (rst.RecordCount == 1) { strText += rst.Fields("雇员ID").Value + " - " + rst.Fields("尊称").Value + " " + rst.Fields("姓氏").Value + " " + rst.Fields("名字").Value; strText += "|"; strText += rst.Fields("头衔").Value; strText += "|"; strText += rst.Fields("城市").Value + " " + rst.Fields("地区").Value + ", " + rst.Fields("国家").Value; strText += "|"; d = new Date(rst.Fields("雇用日期").Value); strText += (1+d.getMonth()) + "/" + d.getDate() + "/" +d.getYear(); } return strText; } </SCRIPT> |
|
无组件生成BMP验证码
|
作者:Layen 来源:动网论坛
<% Call Com_CreatValidCode("ValidCode") Sub Com_CreatValidCode(pSN)
' 禁止缓存 Response.Expires = -9999 Response.AddHeader "Pragma","no-cache" Response.AddHeader "cache-ctrol","no-cache" Response.ContentType = "Image/BMP"
Randomize
Dim i, ii, iii
Const cOdds = 2 ' 杂点出现的机率 Const cAmount = 36 ' 文字数量 Const cCode = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"
' 颜色的数据(字符,背景) Dim vColorData(1) vColorData(0) = ChrB(0) & ChrB(0) & ChrB(0) ' 蓝0,绿0,红0(黑色) vColorData(1) = ChrB(250) & ChrB(236) & ChrB(211) ' 蓝250,绿236,红211(浅蓝色)
' 随机产生字符 Dim vCode(4), vCodes For i = 0 To 3 vCode(i) = Int(Rnd * cAmount) vCodes = vCodes & Mid(cCode, vCode(i) + 1, 1) Next
Session(pSN) = vCodes '记录入Session
' 字符的数据 Dim vNumberData(35) vNumberData(0) = "1110000111110111101111011110111101001011110100101111010010111101001011110111101111011110111110000111" vNumberData(1) = "1111011111110001111111110111111111011111111101111111110111111111011111111101111111110111111100000111" vNumberData(2) = "1110000111110111101111011110111111111011111111011111111011111111011111111011111111011110111100000011" vNumberData(3) = "1110000111110111101111011110111111110111111100111111111101111111111011110111101111011110111110000111" vNumberData(4) = "1111101111111110111111110011111110101111110110111111011011111100000011111110111111111011111111000011" vNumberData(5) = "1100000011110111111111011111111101000111110011101111111110111111111011110111101111011110111110000111" vNumberData(6) = "1111000111111011101111011111111101111111110100011111001110111101111011110111101111011110111110000111" vNumberData(7) = "1100000011110111011111011101111111101111111110111111110111111111011111111101111111110111111111011111" vNumberData(8) = "1110000111110111101111011110111101111011111000011111101101111101111011110111101111011110111110000111" vNumberData(9) = "1110001111110111011111011110111101111011110111001111100010111111111011111111101111011101111110001111" vNumberData(10) = "1111011111111101111111101011111110101111111010111111101011111100000111110111011111011101111000100011" vNumberData(11) = "1000000111110111101111011110111101110111110000111111011101111101111011110111101111011110111000000111" vNumberData(12) = "1110000011110111101110111110111011111111101111111110111111111011111111101111101111011101111110001111" vNumberData(13) = "1000001111110111011111011110111101111011110111101111011110111101111011110111101111011101111000001111" vNumberData(14) = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011110111000000111" vNumberData(15) = "1000000111110111101111011011111101101111110000111111011011111101101111110111111111011111111000111111" vNumberData(16) = "1110000111110111011110111101111011111111101111111110111111111011100011101111011111011101111110001111" vNumberData(17) = "1000100011110111011111011101111101110111110000011111011101111101110111110111011111011101111000100011" vNumberData(18) = "1100000111111101111111110111111111011111111101111111110111111111011111111101111111110111111100000111" vNumberData(19) = "1110000011111110111111111011111111101111111110111111111011111111101111111110111110111011111000011111" vNumberData(20) = "1000100011110111011111011011111101011111110001111111010111111101101111110110111111011101111000100011" vNumberData(21) = "1000111111110111111111011111111101111111110111111111011111111101111111110111111111011110111000000011" vNumberData(22) = "1000100011110010011111001001111100100111110101011111010101111101010111110101011111010101111001010011" vNumberData(23) = "1000100011110011011111001101111101010111110101011111010101111101100111110110011111011001111000110111" vNumberData(24) = "1110001111110111011110111110111011111011101111101110111110111011111011101111101111011101111110001111" vNumberData(25) = "1000000111110111101111011110111101111011110000011111011111111101111111110111111111011111111000111111" vNumberData(26) = "1110001111110111011110111110111011111011101111101110111110111011111011101001101111011001111110001011" vNumberData(27) = "1000001111110111011111011101111101110111110000111111010111111101101111110110111111011101111000110011" vNumberData(28) = "1110000011110111101111011110111101111111111001111111111001111111111011110111101111011110111100000111" vNumberData(29) = "1000000011101101101111110111111111011111111101111111110111111111011111111101111111110111111110001111" vNumberData(30) = "1000100011110111011111011101111101110111110111011111011101111101110111110111011111011101111110001111" vNumberData(31) = "1000100011110111011111011101111101110111111010111111101011111110101111111010111111110111111111011111" vNumberData(32) = "1001010011110101011111010101111101010111110101011111001001111110101111111010111111101011111110101111" vNumberData(33) = "1000100011110111011111101011111110101111111101111111110111111110101111111010111111011101111000100011" vNumberData(34) = "1000100011110111011111011101111110101111111010111111110111111111011111111101111111110111111110001111" vNumberData(35) = "1100000011110111011111111101111111101111111110111111110111111111011111111011111111101110111100000011"
' 输出图像文件头 Response.BinaryWrite ChrB(66) & ChrB(77) & ChrB(230) & ChrB(4) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(54) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(40) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(10) & ChrB(0) &_ ChrB(0) & ChrB(0) & ChrB(1) & ChrB(0)
' 输出图像信息头 Response.BinaryWrite ChrB(24) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(176) & ChrB(4) &_ ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) & ChrB(0) & ChrB(0) & ChrB(18) & ChrB(11) &_ ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) & ChrB(0) &_ ChrB(0) & ChrB(0)
For i = 9 To 0 Step -1 ' 历经所有行 For ii = 0 To 3 ' 历经所有字 For iii = 1 To 10 ' 历经所有像素 ' 逐行、逐字、逐像素地输出图像数据 If Rnd * 99 + 1 < cOdds Then ' 随机生成杂点 Response.BinaryWrite vColorData(0) Else Response.BinaryWrite vColorData(Mid(vNumberData(vCode(ii)), i * 10 + iii, 1)) End If Next Next Next End Sub %>
|
|
动物语录精选
|
动物语录精选
大熊猫:哈哈,想要风光吗?学我爷爷奶奶他们啊,熊和猫结婚。
恐龙:不好意思,死得太早了,让你们伤脑筋了!
狐狸:娘的,明明是高级香水,你们却说是狐臭。
猪:吃啥补啥,我若不聪明,你们吃我补啥?
羊:麻烦您了,教授,以后讲到我尾巴时别用简称。
牛:凭什么呀,我老实本份,干那个的男人,却叫什么"午夜牛朗"!
雄孔雀:呸,你们下流,老爱看我发情!
鸭子:500只鸭子等于一个女人。请问,是美女吗?
袋鼠:唉,没钱,口袋再大也还是鼠!
猴子:你想红起来吗?做我的屁股啊!
乌龟:我抗议,为什么随便用我高贵的头部给你们的器官起名字!
老鼠:唉,成天为吃喝担惊受怕的,能不老吗?!
企鹅:我们从来不跳脱衣舞!
鸡:叫我小姐算了,好听些!
苍蝇:我和蜜蜂的最大差别在于口味不同。
蛇:谁跟我提足球,我就跟谁急!
熊:还是胆小些好啊!
蜈蚣:为了省钱,我从来不穿鞋。
鱼:打死我也不去什么网吧!
荧火虫:谁要学放电?
乌贼:娘的,满肚子墨水居然也会是贼吗!
蝉:哼!不买票,就别怪我乱唱。
螳螂:怎么没酒店雇我切菜?
|
文章收藏 乱闪 发表于 2005/1/28 19:11:39 |
| |
如何在ASP.NET中使用JavaScript脚本
|
简单点的
如要在一个按钮上增加认证脚本,可以这样
<%@ Page Language="C#" %>
<SCRIPT language="javascript">
function getconfirm ()
{
if (confirm("Do you want to delete record?")==true)
return true;
else
return false;
}
</SCRIPT>
<script runat="server">
public void Page_Load(Object sender, EventArgs E) {
btnSubmit.Attributes.Add("onclick","return getconfirm ();");
}
void btnSubmit_Click(object sender, EventArgs e) {
Message.Text = "You entered your name as: " + txtName.Text;
}
</script>
<html>
<head>
</head>
<body>
<form runat="server">
Name: <asp:Textbox id="txtName" runat="server"/>
<asp:Button id="btnSubmit" onclick="btnSubmit_Click" runat="server" Text="Submit"></asp:Button><br/>
<asp:Label id="Message" runat="server"/>
</form>
</body>
</html>
注意关键的地方btnSubmit.Attributes.Add("onclick","return fffkkk();");这句话,就相当于在静态页面标签上添加 “onclick = “return fffkkk();” 一样
二)复杂一点的
有的时候我们要在DataGrid的删除列上添加认证,可以这样
首先建一个DataGrid,然后给她增加一个删除列
<asp:DataGrid id="DataGrid1" runat="server">
<Columns>
<asp:TemplateColumn>
<ItemTemplate>
<asp:LinkButton id="cmdDel"
runat="server" Text="Delete"
CommandName="Delete" CausesValidation="false">
</asp:LinkButton>
</ItemTemplate>
</asp:TemplateColumn>
</Columns>
</asp:DataGrid>
然后在DataGrid 的ItemDataBound事件中这样写
Private Sub DataGrid1_ItemDataBound
(ByVal sender As Object, ByVal e As DataGridItemEventArgs)
Handles DataGrid1.ItemDataBound
Dim l As LinkButton
If e.Item.ItemType = ListItemType.Item Or
e.Item.ItemType = ListItemType.AlternatingItem Then
l = CType(e.Item.Cells(0).FindControl("cmdDel"), LinkButton)
l.Attributes.Add("onclick", "return getconfirm();")
End If
End Sub
Getconfirm()函数和第一个是一样的
function getconfirm()
{
if (confirm("Do you want to delete record?")==true)
return true;
else
return false;
}
这样就可以了,呵呵,以上是我在编程中从资料里总结出来的,也许对你有用。 |
|
SQL核心语句(非常实用的几个技巧)
|
_ArticleContent1_lblContent>插入数据
向表中添加一个新记录,你要使用SQL INSERT 语句。这里有一个如何使用这种语句的例子:
INSERT mytable (mycolumn) VALUES (‘some data’)
这个语句把字符串’some data’插入表mytable的mycolumn字段中。将要被插入数据的字段的名字在第一个括号中指定,实际的数据在第二个括号中给出。
INSERT 语句的完整句法如下:
INSERT [INTO] {table_name|view_name} [(column_list)] {DEFAULT VALUES |
Values_list | select_statement}
如果一个表有多个字段,通过把字段名和字段值用逗号隔开,你可以向所有的字段中插入数据。假设表mytable有三个字段first_column,second_column,和third_column。下面的INSERT语句添加了一条三个字段都有值的完整记录:
INSERT mytable (first_column,second_column,third_column)
VALUES (‘some data’,’some more data’,’yet more data’)
注意
你可以使用INSERT语句向文本型字段中插入数据。但是,如果你需要输入很长的字符串,你应该使用WRITETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
如果你在INSERT 语句中只指定两个字段和数据会怎么样呢?换句话说,你向一个表中插入一条新记录,但有一个字段没有提供数据。在这种情况下,有下面的四种可能:
如果该字段有一个缺省值,该值会被使用。例如,假设你插入新记录时没有给字段third_column提供数据,而这个字段有一个缺省值’some value’。在这种情况下,当新记录建立时会插入值’some value’。
如果该字段可以接受空值,而且没有缺省值,则会被插入空值。
如果该字段不能接受空值,而且没有缺省值,就会出现错误。你会收到错误信息:
The column in table mytable may not be null.
最后,如果该字段是一个标识字段,那么它会自动产生一个新值。当你向一个有标识字段的表中插入新记录时,只要忽略该字段,标识字段会给自己赋一个新值。
注意
向一个有标识字段的表中插入新记录后,你可以用SQL变量@@identity来访问新记录
的标识字段的值。考虑如下的SQL语句:
INSERT mytable (first_column) VALUES(‘some value’)
INSERT anothertable(another_first,another_second)
VALUES(@@identity,’some value’)
如果表mytable有一个标识字段,该字段的值会被插入表anothertable的another_first字段。这是因为变量@@identity总是保存最后一次插入标识字段的值。
字段another_first应该与字段first_column有相同的数据类型。但是,字段another_first不能是应该标识字段。Another_first字段用来保存字段first_column的值。
删除记录
要从表中删除一个或多个记录,需要使用SQL DELETE语句。你可以给DELETE 语句提供WHERE 子句。WHERE子句用来选择要删除的记录。例如,下面的这个DELETE语句只删除字段first_column的值等于’Delete Me’的记录:
DELETE mytable WHERE first_column=’Deltet Me’
DELETE 语句的完整句法如下:
DELETE [FROM] {table_name|view_name} [WHERE clause]
在SQL SELECT 语句中可以使用的任何条件都可以在DELECT 语句的WHERE子句 中使用。例如,下面的这个DELETE语句只删除那些first_column字段的值为’goodbye’或second_column字段的值为’so long’的记录:
DELETE mytable WHERE first_column=’goodby’ OR second_column=’so long’
如果你不给DELETE 语句提供WHERE 子句,表中的所有记录都将被删除。你不应该有这种想法。如果你想删除应该表中的所有记录,应使用第十章所讲的TRUNCATE TABLE语句。
注意
为什么要用TRUNCATE TABLE 语句代替DELETE语句?当你使用TRUNCATE TABLE语句时,记录的删除是不作记录的。也就是说,这意味着TRUNCATE TABLE 要比DELETE快得多。
更新记录
要修改表中已经存在的一条或多条记录,应使用SQL UPDATE语句。同DELETE语句一样,UPDATE语句可以使用WHERE子句来选择更新特定的记录。请看这个例子:
UPDATE mytable SET first_column=’Updated!’ WHERE second_column=’Update Me!’
这个UPDATE 语句更新所有second_column字段的值为’Update Me!’的记录。对所有被选中的记录,字段first_column的值被置为’Updated!’。
下面是UPDATE语句的完整句法:
UPDATE {table_name|view_name} SET [{table_name|view_name}]
{column_list|variable_list|variable_and_column_list}
[,{column_list2|variable_list2|variable_and_column_list2}…
[,{column_listN|variable_listN|variable_and_column_listN}]]
[WHERE clause]
注意
你可以对文本型字段使用UPDATE语句。但是,如果你需要更新很长的字符串,应使用UPDATETEXT语句。这部分内容对本书来说太高级了,因此不加讨论。要了解更多的信息,请参考Microsoft SQL Sever 的文档。
如果你不提供WHERE子句,表中的所有记录都将被更新。有时这是有用的。例如,如果你想把表titles中的所有书的价格加倍,你可以使用如下的UPDATE 语句:
你也可以同时更新多个字段。例如,下面的UPDATE语句同时更新first_column,second_column,和third_column这三个字段:
UPDATE mytable SET first_column=’Updated!’
Second_column=’Updated!’
Third_column=’Updated!’
WHERE first_column=’Update Me1’
技巧
SQL忽略语句中多余的空格。你可以把SQL语句写成任何你最容易读的格式。
用SELECT 创建记录和表
你也许已经注意到,INSERT 语句与DELETE语句和UPDATE语句有一点不同,它一次只操作一个记录。然而,有一个方法可以使INSERT 语句一次添加多个记录。要作到这一点,你需要把INSERT 语句与SELECT 语句结合起来,象这样:
INSERT mytable (first_column,second_column)
SELECT another_first,another_second
FROM anothertable
WHERE another_first=’Copy Me!’
这个语句从anothertable拷贝记录到mytable.只有表anothertable中字段another_first的值为’Copy Me!’的记录才被拷贝。
当为一个表中的记录建立备份时,这种形式的INSERT 语句是非常有用的。在删除一个表中的记录之前,你可以先用这种方法把它们拷贝到另一个表中。
如果你需要拷贝整个表,你可以使用SELECT INTO 语句。例如,下面的语句创建了一个名为newtable的新表,该表包含表mytable的所有数据:
SELECT * INTO newtable FROM mytable
你也可以指定只有特定的字段被用来创建这个新表。要做到这一点,只需在字段列表中指定你想要拷贝的字段。另外,你可以使用WHERE 子句来限制拷贝到新表中的记录。下面的例子只拷贝字段second_columnd的值等于’Copy Me!’的记录的first_column字段。
SELECT first_column INTO newtable
FROM mytable
WHERE second_column=’Copy Me!’
使用SQL修改已经建立的表是很困难的。例如,如果你向一个表中添加了一个字段,没有容易的办法来去除它。另外,如果你不小心把一个字段的数据类型给错了,你将没有办法改变它。但是,使用本节中讲述的SQL语句,你可以绕过这两个问题。
例如,假设你想从一个表中删除一个字段。使用SELECT INTO 语句,你可以创建该表的一个拷贝,但不包含要删除的字段。这使你既删除了该字段,又保留了不想删除的数据。
如果你想改变一个字段的数据类型,你可以创建一个包含正确数据类型字段的新表。创建好该表后,你就可以结合使用UPDATE语句和SELECT 语句,把原来表中的所有数据拷贝到新表中。通过这种方法,你既可以修改表的结构,又能保存原有的数据。 |
|
SQL查询语句精华使用简要
|
一、 简单查询 简单的Transact-SQL查询只包括选择列表、FROM子句和WHERE子句。它们分别说明所查询列、查询的 表或视图、以及搜索条件等。 例如,下面的语句查询testtable表中姓名为“张三”的nickname字段和email字段。 SELECT nickname,email FROM testtable WHERE name='张三'
(一) 选择列表 选择列表(select_list)指出所查询列,它可以是一组列名列表、星号、表达式、变量(包括局部变 量和全局变量)等构成。
1、选择所有列 例如,下面语句显示testtable表中所有列的数据: SELECT * FROM testtable
2、选择部分列并指定它们的显示次序 查询结果集合中数据的排列顺序与选择列表中所指定的列名排列顺序相同。 例如: SELECT nickname,email FROM testtable
3、更改列标题 在选择列表中,可重新指定列标题。定义格式为: 列标题=列名 列名 列标题 如果指定的列标题不是标准的标识符格式时,应使用引号定界符,例如,下列语句使用汉字显示列 标题: SELECT 昵称=nickname,电子邮件=email FROM testtable
4、删除重复行 SELECT语句中使用ALL或DISTINCT选项来显示表中符合条件的所有行或删除其中重复的数据行,默认 为ALL。使用DISTINCT选项时,对于所有重复的数据行在SELECT返回的结果集合中只保留一行。
5、限制返回的行数 使用TOP n [PERCENT]选项限制返回的数据行数,TOP n说明返回n行,而TOP n PERCENT时,说明n是 表示一百分数,指定返回的行数等于总行数的百分之几。 例如: SELECT TOP 2 * FROM testtable SELECT TOP 20 PERCENT * FROM testtable
(二)FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 它们之间用逗号分隔。 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 使用下面语句格式加以限定: SELECT username,citytable.cityid FROM usertable,citytable WHERE usertable.cityid=citytable.cityid 在FROM子句中可用以下两种格式为表或视图指定别名: 表名 as 别名 表名 别名
(二) FROM子句 FROM子句指定SELECT语句查询及与查询相关的表或视图。在FROM子句中最多可指定256个表或视图, 它们之间用逗号分隔。 在FROM子句同时指定多个表或视图时,如果选择列表中存在同名列,这时应使用对象名限定这些列 所属的表或视图。例如在usertable和citytable表中同时存在cityid列,在查询两个表中的cityid时应 使用下面语句格式加以限定: SELECT username,citytable.cityid FROM usertable,citytable WHERE usertable.cityid=citytable.cityid 在FROM子句中可用以下两种格式为表或视图指定别名: 表名 as 别名 表名 别名 例如上面语句可用表的别名格式表示为: SELECT username,b.cityid FROM usertable a,citytable b WHERE a.cityid=b.cityid SELECT不仅能从表或视图中检索数据,它还能够从其它查询语句所返回的结果集合中查询数据。 例如: SELECT a.au_fname+a.au_lname FROM authors a,titleauthor ta (SELECT title_id,title FROM titles WHERE ytd_sales>10000 ) AS t WHERE a.au_id=ta.au_id AND ta.title_id=t.title_id 此例中,将SELECT返回的结果集合给予一别名t,然后再从中检索数据。
(三) 使用WHERE子句设置查询条件 WHERE子句设置查询条件,过滤掉不需要的数据行。例如下面语句查询年龄大于20的数据: SELECT * FROM usertable WHERE age>20 WHERE子句可包括各种条件运算符: 比较运算符(大小比较):>、>=、=、<、<=、<>、!>、!< 范围运算符(表达式值是否在指定的范围):BETWEEN…AND… NOT BETWEEN…AND… 列表运算符(判断表达式是否为列表中的指定项):IN (项1,项2……) NOT IN (项1,项2……) 模式匹配符(判断值是否与指定的字符通配格式相符):LIKE、NOT LIKE 空值判断符(判断表达式是否为空):IS NULL、NOT IS NULL 逻辑运算符(用于多条件的逻辑连接):NOT、AND、OR 1、范围运算符例:age BETWEEN 10 AND 30相当于age>=10 AND age<=30 2、列表运算符例:country IN ('Germany','China') 3、模式匹配符例:常用于模糊查找,它判断列值是否与指定的字符串格式相匹配。可用于char、 varchar、text、ntext、datetime和smalldatetime等类型查询。 可使用以下通配字符: 百分号%:可匹配任意类型和长度的字符,如果是中文,请使用两个百分号即%%。 下划线_:匹配单个任意字符,它常用来限制表达式的字符长度。 方括号[]:指定一个字符、字符串或范围,要求所匹配对象为它们中的任一个。 [^]:其取值也[] 相同,但它要求所匹配对象为指定字符以外的任一个字符。 例如: 限制以Publishing结尾,使用LIKE '%Publishing' 限制以A开头:LIKE '[A]%' 限制以A开头外:LIKE '[^A]%' 4、空值判断符例WHERE age IS NULL 5、逻辑运算符:优先级为NOT、AND、OR (四)查询结果排序 使用ORDER BY子句对查询返回的结果按一列或多列排序。ORDER BY子句的语法格式为: ORDER BY {column_name [ASC|DESC]} [,…n] 其中ASC表示升序,为默认值,DESC为降序。ORDER BY不能按ntext、text和image数据类型进行排 序。 例如: SELECT * FROM usertable ORDER BY age desc,userid ASC 另外,可以根据表达式进行排序。
二、 联合查询 UNION运算符可以将两个或两个以上上SELECT语句的查询结果集合合并成一个结果集合显示,即执行联 合查询。UNION的语法格式为: select_statement UNION [ALL] selectstatement [UNION [ALL] selectstatement][…n] 其中selectstatement为待联合的SELECT查询语句。 ALL选项表示将所有行合并到结果集合中。不指定该项时,被联合查询结果集合中的重复行将只保留一 行。 联合查询时,查询结果的列标题为第一个查询语句的列标题。因此,要定义列标题必须在第一个查询语 句中定义。要对联合查询结果排序时,也必须使用第一查询语句中的列名、列标题或者列序号。 在使用UNION 运算符时,应保证每个联合查询语句的选择列表中有相同数量的表达式,并且每个查询选 择表达式应具有相同的数据类型,或是可以自动将它们转换为相同的数据类型。在自动转换时,对于数值类 型,系统将低精度的数据类型转换为高精度的数据类型。 在包括多个查询的UNION语句中,其执行顺序是自左至右,使用括号可以改变这一执行顺序。例如: 查询1 UNION (查询2 UNION 查询3)
三、连接查询 通过连接运算符可以实现多个表查询。连接是关系数据库模型的主要特点,也是它区别于其它类型 数据库管理系统的一个标志。 在关系数据库管理系统中,表建立时各数据之间的关系不必确定,常把一个实体的所有信息存放在 一个表中。当检索数据时,通过连接操作查询出存放在多个表中的不同实体的信息。连接操作给用户带 来很大的灵活性,他们可以在任何时候增加新的数据类型。为不同实体创建新的表,尔后通过连接进行 查询。 连接可以在SELECT 语句的FROM子句或WHERE子句中建立,似是而非在FROM子句中指出连接时有助于 将连接操作与WHERE子句中的搜索条件区分开来。所以,在Transact-SQL中推荐使用这种方法。 SQL-92标准所定义的FROM子句的连接语法格式为: FROM join_table join_type join_table [ON (join_condition)] 其中join_table指出参与连接操作的表名,连接可以对同一个表操作,也可以对多表操作,对同一 个表操作的连接又称做自连接。 join_type 指出连接类型,可分为三种:内连接、外连接和交叉连接。内连接(INNER JOIN)使用比 较运算符进行表间某(些)列数据的比较操作,并列出这些表中与连接条件相匹配的数据行。根据所使用 的比较方式不同,内连接又分为等值连接、自然连接和不等连接三种。 外连接分为左外连接(LEFT OUTER JOIN或LEFT JOIN)、右外连接(RIGHT OUTER JOIN或RIGHT JOIN) 和全外连接(FULL OUTER JOIN或FULL JOIN)三种。与内连接不同的是,外连接不只列出与连接条件相匹 配的行,而是列出左表(左外连接时)、右表(右外连接时)或两个表(全外连接时)中所有符合搜索条件的 数据行。 交叉连接(CROSS JOIN)没有WHERE 子句,它返回连接表中所有数据行的笛卡尔积,其结果集合中的 数据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 连接操作中的ON (join_condition) 子句指出连接条件,它由被连接表中的列和比较运算符、逻辑 运算符等构成。 无论哪种连接都不能对text、ntext和image数据类型列进行直接连接,但可以对这三种列进行间接 连接。例如: SELECT p1.pub_id,p2.pub_id,p1.pr_info FROM pub_info AS p1 INNER JOIN pub_info AS p2 ON DATALENGTH(p1.pr_info)=DATALENGTH(p2.pr_info)
(一)内连接 内连接查询操作列出与连接条件匹配的数据行,它使用比较运算符比较被连接列的列值。内连接分 三种: 1、等值连接:在连接条件中使用等于号(=)运算符比较被连接列的列值,其查询结果中列出被连接 表中的所有列,包括其中的重复列。 2、不等连接: 在连接条件使用除等于运算符以外的其它比较运算符比较被连接的列的列值。这些 运算符包括>、>=、<=、<、!>、!<和<>。 3、自然连接:在连接条件中使用等于(=)运算符比较被连接列的列值,但它使用选择列表指出查询 结果集合中所包括的列,并删除连接表中的重复列。 例,下面使用等值连接列出authors和publishers表中位于同一城市的作者和出版社: SELECT * FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city 又如使用自然连接,在选择列表中删除authors 和publishers 表中重复列(city和state): SELECT a.*,p.pub_id,p.pub_name,p.country FROM authors AS a INNER JOIN publishers AS p ON a.city=p.city (二)外连接 内连接时,返回查询结果集合中的仅是符合查询条件( WHERE 搜索条件或 HAVING 条件)和连接条件 的行。而采用外连接时,它返回到查询结果集合中的不仅包含符合连接条件的行,而且还包括左表(左外 连接时)、右表(右外连接时)或两个边接表(全外连接)中的所有数据行。 如下面使用左外连接将论坛内容和作者信息连接起来: SELECT a.*,b.* FROM luntan LEFT JOIN usertable as b ON a.username=b.username 下面使用全外连接将city表中的所有作者以及user表中的所有作者,以及他们所在的城市: SELECT a.*,b.* FROM city as a FULL OUTER JOIN user as b ON a.username=b.username
(三)交叉连接 交叉连接不带WHERE 子句,它返回被连接的两个表所有数据行的笛卡尔积,返回到结果集合中的数 据行数等于第一个表中符合查询条件的数据行数乘以第二个表中符合查询条件的数据行数。 例,titles表中有6类图书,而publishers表中有8家出版社,则下列交叉连接检索到的记录数将等 于6*8=48行。 SELECT type,pub_name FROM titles CROSS JOIN publishers ORDER BY type
|
|
【算法】C#快速排序类
|
快速排序的基本思想是基于分治策略的。对于输入的子序列ap..ar,如果规模足够小则直接进行排序,否则分三步处理:
分解(Divide):将输入的序列ap..ar划分成两个非空子序列ap..aq和aq+1..ar,使ap..aq中任一元素的值不大于aq+1..ar中任一元素的值。 递归求解(Conquer):通过递归对p..aq和aq+1..ar进行排序。 合并(Merge):由于对分解出的两个子序列的排序是就地进行的,所以在ap..aq和aq+1..ar都排好序后不需要执行任何计算ap..ar就已排好序。 这个解决流程是符合分治法的基本步骤的。因此,快速排序法是分治法的经典应用实例之一。
using System;
namespace VcQuickSort { /// <summary> /// ClassQuickSort 快速排序。 /// 范维肖 /// </summary> public class QuickSort { public QuickSort() { }
private void Swap(ref int i,ref int j) //swap two integer { int t; t=i; i=j; j=t; } public void Sort(int [] list,int low,int high) { if(high<=low) { //only one element in array list //so it do not need sort return; } else if (high==low+1) { //means two elements in array list //so we just compare them if(list[low]>list[high]) { //exchange them Swap(ref list[low],ref list[high]); return; } } //more than 3 elements in the arrary list //begin QuickSort myQuickSort(list,low,high); }
public void myQuickSort(int [] list,int low,int high) { if(low<high) { int pivot=Partition(list,low,high); myQuickSort(list,low,pivot-1); myQuickSort(list,pivot+1,high); } }
private int Partition(int [] list,int low,int high) { //get the pivot of the arrary list int pivot; pivot=list[low]; while(low<high) { while(low<high && list[high]>=pivot) { high--; } if(low!=high) { Swap(ref list[low],ref list[high]); low++; } while(low<high && list[low]<=pivot) { low++; } if(low!=high) { Swap(ref list[low],ref list[high]); high--; } } return low; }
} } |
|
从内存播放Flash
|
前提: 被要求Flash必须加密,不能在硬盘上留下文件。
起点: Flash 播放器的属性Movie接受本地文件名 或者 HTTP URL。
首先当然是在网络上寻找解决方案了。找了半天,发现一个国内的,一个国外的。都在出售。 奇怪的是,他们不约而同的都是用了Delphi。 根据了解的人透露,它是利用了Flash一个未公开的属性MovieData, 该属性文档中没有记录,但是从名称可以看出应该是应该是接受数据片的。
其国内的那一版目前还不支持最新的flash播放器。这让人不能不有点担忧。 因此还是尽量照自己的思路来。
思路: 最开始考虑的就是建一个协议(类似于rtsp的样子)来代替http,并把请求转到本地守护进程。 后来又想到还不如直接建立一个简陋的http服务器,直接使用http url , 这样子肯定是可行的,于是就着手写http服务器了。 写了个简单的测试程序,监听了一些http包,发现即使建立个简陋的http服务器,也需要了解一下rfc2612的,考虑到flash不同版本可能识别的响应及其标签,响应头还是蛮复杂的。 看rfc2612的时候突然想到, 建立http服务器是虚拟一个url;如果能够虚拟一个本地文件名,是不是更简单些呢? 照着这个思路,找了个把小时,当然也走了不少的弯路。最终发现可以用管道来处理。
因为管道客户端也是用CreateFile, ReadFile来处理的, 与普通文件一样。这样子就可以用管道名称来代替文件名来欺骗一下flash乐^_^
被欺骗的Flash读文件的时候:CreateFile, ReadFile实际上是读的是管道,只是他自己不知道而已. 而我们可以向管道写入任何内容,这不就达到目的了么?
写了段代码验证了一下,确实可行。 而且还模拟了网络的流环境(每次读10字节,延迟3ms),发现效果不错,正如预料的一样。
下面贴出来的代码来资源是测试程序,比较零乱。如果你仔细看了上面的内容,并且对于提到的属于没什么不解的话,应该就不用看下面的代码了。 附上来仅仅是为了备忘。
代码是一个console程序, vs2003环境。 假设有个样例Flash为Blue.swf。 设定的管道名称为: \\.\pipe\egbpipe 验证时先运行本程序,并保证blue.swf存在。然后打开flash播放器,用她播放文件"\\.\pipe\egbpipe"。
代码开始: ------------- // PipeService.cpp : 定义控制台应用程序的入口点。 //
#include "stdafx.h"
#define BUFSIZE 1024 #define PIPE_TIMEOUT 1000
int __main(void); int MyErrExit(char*); int _tmain(int argc, _TCHAR* argv[]) { __main(); return 0; }
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <windows.h> VOID InstanceThread(LPVOID); VOID GetAnswerToRequest(LPTSTR, LPTSTR, LPDWORD); VOID GetAnswerToRequest(HANDLE hFile); int xx = 0;
/*
\\.\pipe\egbpipe
*/
int __main(void) { BOOL fConnected; DWORD dwThreadId; HANDLE hPipe, hThread; LPTSTR lpszPipename = "\\\\.\\pipe\\egbpipe"; // The main loop creates an instance of the named pipe and // then waits for a client to connect to it. When the client // connects, a thread is created to handle communications // with that client, and the loop is repeated. for (;;) { hPipe = CreateNamedPipe( lpszPipename, // pipe name PIPE_ACCESS_DUPLEX, // read/write access PIPE_TYPE_MESSAGE | // message type pipe PIPE_READMODE_MESSAGE | // message-read mode PIPE_WAIT, // blocking mode PIPE_UNLIMITED_INSTANCES, // max. instances BUFSIZE, // output buffer size BUFSIZE, // input buffer size PIPE_TIMEOUT, // client time-out NULL); // no security attribute
if (hPipe == INVALID_HANDLE_VALUE) MyErrExit("CreatePipe"); // Wait for the client to connect; if it succeeds, // the function returns a nonzero value. If the function returns // zero, GetLastError returns ERROR_PIPE_CONNECTED. fConnected = ConnectNamedPipe(hPipe, NULL) ? TRUE : (GetLastError() == ERROR_PIPE_CONNECTED); if (fConnected) { // Create a thread for this client. hThread = CreateThread( NULL, // no security attribute 0, // default stack size (LPTHREAD_START_ROUTINE) InstanceThread, (LPVOID) hPipe, // thread parameter 0, // not suspended &dwThreadId); // returns thread ID
if (hThread == NULL) MyErrExit("CreateThread"); else CloseHandle(hThread); } else // The client could not connect, so close the pipe. CloseHandle(hPipe); } return 1; } VOID InstanceThread(LPVOID lpvParam) { CHAR chRequest[BUFSIZE]; CHAR chReply[BUFSIZE]; DWORD cbBytesRead, cbReplyBytes, cbWritten; BOOL fSuccess; HANDLE hPipe; // The thread's parameter is a handle to a pipe instance. hPipe = (HANDLE) lpvParam; // while (1) { // Read client requests from the pipe. /* fSuccess = ReadFile( hPipe, // handle to pipe chRequest, // buffer to receive data BUFSIZE, // size of buffer &cbBytesRead, // number of bytes read NULL); // not overlapped I/O
if (! fSuccess || cbBytesRead == 0) break; */ //GetAnswerToRequest(chRequest, chReply, &cbReplyBytes); GetAnswerToRequest(hPipe); /* // Write the reply to the pipe. fSuccess = WriteFile( hPipe, // handle to pipe chReply, // buffer to write from cbReplyBytes, // number of bytes to write &cbWritten, // number of bytes written NULL); // not overlapped I/O
// if (! fSuccess || cbReplyBytes != cbWritten) break; */ } // Flush the pipe to allow the client to read the pipe's contents // before disconnecting. Then disconnect the pipe, and close the // handle to this pipe instance. FlushFileBuffers(hPipe); DisconnectNamedPipe(hPipe); CloseHandle(hPipe); }
int MyErrExit(char* szInfo) { return MessageBox(0, szInfo, "Whoo", MB_OK); }
VOID GetAnswerToRequest(HANDLE hFile) { const int BuffLen = 10; byte buff[BuffLen] = {0};
FILE* f = fopen("blue.swf", "rb");
int iLen = BuffLen; while(iLen == BuffLen) { iLen = fread(buff, sizeof(byte), BuffLen, f);
Sleep(3); DWORD uLen = 0; WriteFile(hFile, buff, iLen, &uLen, NULL); } _fcloseall( ); }
|
|
J2EE初学者需要理解的五个问题
|
一、J2EE提出的背景 1、 企业级应用框架的需求 在许多企业级应用中,例如数据库连接、邮件服务、事务处理等都是一些通用企业需求模块,这些模块如果每次再开发中都由开发人员来完成的话,将会造成开发周期长和代码可靠性差等问题。于是许多大公司开发了自己的通用模块服务。这些服务性的软件系列同陈为中间件。 2、 为了通用必须要提出规范,不然无法达到通用 在上面的需求基础之上,许多公司都开发了自己的中间件,但其与用户的沟通都各有不同,从而导致用户无法将各个公司不同的中间件组装在一块为自己服务。从而产生瓶颈。于是提出标准的概念。其实J2EE就是基于JAVA技术的一系列标准。 注:中间件的解释 中间件处在操作系统和更高一级应用程序之间。他充当的功能是:将应用程序运行环境与操作系统隔离,从而实现应用程序开发者不必为更多系统问题忧虑,而直接关注该应用程序在解决问题上的能力。我们后面说到的容器的概念就是中间件的一种。 二、相关名词解释 容器:充当中间件的角色 WEB容器:给处于其中的应用程序组件(JSP,SERVLET)提供一个环境,使JSP,SERVLET直接更容器中的环境变量接口交互,不必关注其它系统问题。主要有WEB服务器来实现。例如:TOMCAT,WEBLOGIC,WEBSPHERE等。该容器提供的接口严格遵守J2EE规范中的 WEB APPLICATION 标准。我们把遵守以上标准的WEB服务器就叫做J2EE中的WEB容器。 EJB容器:Enterprise java bean 容器。更具有行业领域特色。他提供给运行在其中的组件EJB各种管理功能。只要满足J2EE规范的EJB放入该容器,马上就会被容器进行高效率的管理。并且可以通过现成的接口来获得系统级别的服务。例如邮件服务、事务管理。 WEB容器和EJB容器在原理上是大体相同的,更多的区别是被隔离的外界环境。WEB容器更多的是跟基于HTTP的请求打交道。而EJB容器不是。它是更多的跟数据库、其它服务打交道。但他们都是把与外界的交互实现从而减轻应用程序的负担。例如SERVLET不用关心HTTP的细节,直接引用环境变量 session,request,response就行、EJB不用关心数据库连接速度、各种事务控制,直接由容器来完成。 RMI/IIOP:远程方法调用/internet对象请求中介协议,他们主要用于通过远程调用服务。例如,远程有一台计算机上运行一个程序,它提供股票分析服务,我们可以在本地计算机上实现对其直接调用。当然这是要通过一定的规范才能在异构的系统之间进行通信。RMI是JAVA特有的。 JNDI:JAVA命名目录服务。主要提供的功能是:提供一个目录系统,让其它各地的应用程序在其上面留下自己的索引,从而满足快速查找和定位分布式应用程序的功能。 JMS:JAVA消息服务。主要实现各个应用程序之间的通讯。包括点对点和广播。 JAVAMAIL:JAVA邮件服务。提供邮件的存储、传输功能。他是JAVA编程中实现邮件功能的核心。相当MS中的EXCHANGE开发包。 JTA:JAVA事务服务。提供各种分布式事务服务。应用程序只需调用其提供的接口即可。 JAF:JAVA安全认证框架。提供一些安全控制方面的框架。让开发者通过各种部署和自定义实现自己的个性安全控制策略。 EAI:企业应用集成。是一种概念,从而牵涉到好多技术。J2EE技术是一种很好的集成实现。 三、J2EE的优越性 1、 基于JAVA 技术,平台无关性表现突出 2、 开放的标准,许多大型公司已经实现了对该规范支持的应用服务器。如BEA ,IBM,ORACLE等。 3、 提供相当专业的通用软件服务。 4、 提供了一个优秀的企业级应用程序框架,对快速高质量开发打下基础 四、体系结构图 mailto:luopc@edu-edu.com.cn了解更详细的通俗体系内容,请给我来信。 五、现状 J2EE是由SUN 公司开发的一套企业级应用规范。现在最高版本是1.4。支持J2EE的应用服务器有IBM WEBSPHERE APPLICATION SERVER,BEA WEBLOGIC SERVER,JBOSS,ORACLE APPLICATION SERVER,SUN ONE APPLICATION SERVER 等。. 摘自:javaresearch.org
|
|
ASP操作XML数据小结
|
NO.1--建立一个XML数据库data.xml <?xml version="1.0"?> <records> <record> <name>caca</name> <qq>154222225</qq> <email>root@3ney.com</email> </record> <records> NO.2--建立对象CreateObject 建立data.xml的对象先 set xmldoc=server.createobjcet("microsoft.xmldom") xmldoc.load(server.mappath("data.xml")
NO.3--选定节点SelectNode 你想操作哪个Node,必须定位到这个节点是不是,先看看这个data.xml有几个Node?? 用一个递归函数搞定: getnodes(xmldoc)
sub getnodes(node) dim i response.write("<br><b>NodeName:</b>"&node.nodename&"<br><b>NodeTypeString:</b>"&node.nodetypestring&"<br><b>NodeValue:</b>"&node.nodevalue&"<br><b>Text:</b>"&node.text&"<br><b>node.childnodes.length:</b>"&node.childnodes.length&"<p>")
if node.childnodes.length<>0 then for i=0 to node.childnodes.length-1 getnodes(node.childnodes(i)) next end if end sub 用这个函数后,可以看到这个data.xml有10个Node 这些Node可以很简单的定位: xmldoc xmldoc.childnodes(0) xmldoc.childnodes(1) xmldoc.childnodes(1).childnodes(0) xmldoc.childnodes(1).childnodes(0).childnodes(0) xmldoc.childnodes(1).childnodes(0).childnodes(0).text xmldoc.childnodes(1).childnodes(0).childnodes(1) xmldoc.childnodes(1).childnodes(0).childnodes(1).text xmldoc.childnodes(1).childnodes(0).childnodes(2) xmldoc.childnodes(1).childnodes(0).childnodes(2).text 是不是定位很简单呀,还有个方法,比如定位<name> xmldoc.selectsinglenode("//name") 还有: xmldoc.getelementsbytagname("name").item(0) NO.4--给节点赋值(修改节点的值) 学会了定位节点,利用其属性,就可以修改或者赋值了 例如,把<name>的值caca改为wawa xmldoc.selectsinglenode("//name").text="wawa" xmldoc.save(server.mappath("data.xml")) 搞定! NO.5--创建新的节点CreatenewNode 用createelement或者createnode("","","") 例如:在record下新建个<age>,只需要一句就搞定: xmldoc.selectsinglenode("//record").appendchild(xmldoc.createelement("<age>")) 给<age>赋值 xmldoc.selectsinglenode("//age").text="20" xmldoc.save(server.mappath("data.xml")) 搞定! NO.6--删除一个节点DeleteNode 你必须明确你想删除的这个节点的父节点,以及这个节点的特征 例如:删除<qq>节点 xmldoc.selectsinglenode("//record").removechild(xmldoc.selectsinglenode("//qq")) 例如:删除那个<name>=caca的<record> xmldoc.selectsinglenode("//records").removechild(xmldoc.selectsinglenode("//record[name='caca'])) xmldoc.save(server.mappath("data.xml")) 搞定! 只有能熟练这6条code,用asp控制xml数据库,也就差不多了...
|
|
|