2004年12月23日

正确的格式应该是:Copyright [dates] by [author/owner]

© 通常可以代替Copyright, 但是不可以用(c)。 All Rights Reserved 在某些国家曾经是必须的,但是现在在大多数国家,都不是法律上必须有的字样。

参见下面几个正确的格式:

©1995-2004 Macromedia, Inc. All rights reserved.

©2004 Microsoft Corporation. All rights reserved.

Copyright © 2004 Adobe Systems Incorporated. All rights reserved.

©1995-2004 Eric A. and Kathryn S. Meyer. All Rights Reserved.

请注意标点符号和大小写的用法,这也是专业精神的一种体现。

现在流行some rights reserved:creativecommons.org

some rights reserved 和copyright 本身并不矛盾,但是其中的界限更多是一个道德问题,真正的保留一部分权力,是指给浏览者fair use 的权利,fair use的界定也决不是随便乱用,或者抄袭。

甚至说,除了copyright, 还有copyleft,它的定义是为了程序员开发能够共享源代码的一个方式,英文里free, 并不仅仅是免费。 而且这种的源码公开免费使用,和版权也一点都不冲突。请大家不要误解。

输入框无法输入<input type=text name=box value=”Locked text!” onFocus=”this.blur()” size=12>

1. oncontextmenu=”window.event.returnvalue=false” 将彻底屏蔽鼠标右键
<table border oncontextmenu=return(false)><td>no</table> 可用于Table

2. <body onselectstart=”return false”> 取消选取、防止复制

3. onpaste=”return false” 不准粘贴

4. oncopy=”return false;” oncut=”return false;” 防止复制

5. <link rel=”Shortcut Icon” href=”favicon.ico”> IE地址栏前换成自己的图标

6. <link rel=”Bookmark” href=”favicon.ico”> 可以在收藏夹中显示出你的图标

7. <input style=”ime-mode:disabled”> 关闭输入法

8. 永远都会带着框架
<script language=”javascript”><!–
if (window == top)top.location.href = “frames.htm”; //frames.htm为框架网页
// –></script>

9. 防止被人frame
<SCRIPT LANGUAGE=javascript><!–
if (top.location != self.location)top.location=self.location;
// –></SCRIPT>

10. <noscript><iframe src=*.html></iframe></noscript> 网页将不能被另存为

11. <input type=button value=查看网页源代码
onclick=”window.location = ‘view-source:’+ ‘http://www.csdn.net/’”>

12. 怎样通过asp的手段来检查来访者是否用了代理
<% if Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)<>”" then
response.write “<font color=#FF0000>您通过了代理服务器,”& _
“真实的IP为”&Request.ServerVariables(“HTTP_X_FORWARDED_FOR”)
end if
%>

13. 取得控件的绝对位置

//javascript
<script language=”javascript”>
function getIE(e){
var t=e.offsetTop;
var l=e.offsetLeft;
while(e=e.offsetParent){
t+=e.offsetTop;
l+=e.offsetLeft;
}
alert(“top=”+t+”\nleft=”+l);
}
</script>

//VBScript
<script language=”VBScript”><!–
function getIE()
dim t,l,a,b
set a=document.all.img1
t=document.all.img1.offsetTop
l=document.all.img1.offsetLeft
while a.tagName<>”BODY”
set a = a.offsetParent
t=t+a.offsetTop
l=l+a.offsetLeft
wend
msgbox “top=”&t&chr(13)&”left=”&l,64,”得到控件的位置”
end function
–></script>

14. 光标是停在文本框文字的最后
<script language=”javascript”>
function cc()
{
var e = event.srcElement;
var r =e.createTextRange();
r.moveStart(‘character’,e.value.length);
r.collapse(true);
r.select();
}
</script>
<input type=text name=text1 value=”123″ onfocus=”cc()”>

15. 判断上一页的来源
asp:
request.servervariables(“HTTP_REFERER”)

javascript:
document.referrer

16. 最小化、最大化、关闭窗口
<object id=hh1 classid=”clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11″>
<param name=”Command” value=”Minimize”></object>
<object id=hh2 classid=”clsid:ADB880A6-D8FF-11CF-9377-00AA003B7A11″>
<param name=”Command” value=”Maximize”></object>
<OBJECT id=hh3 classid=”clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11″>
<PARAM NAME=”Command” value=”Close”></OBJECT>

<input type=button value=最小化 onclick=hh1.Click()>
<input type=button value=最大化 onclick=hh2.Click()>
<input type=button value=关闭 onclick=hh3.Click()>
本例适用于IE

17.
<%
‘定义数据库连接的一些常量
Const adOpenForwardOnly = 0 ‘游标只向前浏览记录,不支持分页、Recordset、BookMark
Const adOpenKeyset = 1 ‘键集游标,其他用户对记录说做的修改将反映到记录集中,但其他用户增加或删除记录不会反映到记录集中。支持分页、Recordset、BookMark
Const adOpenDynamic = 2 ‘动态游标功能最强,但耗资源也最多。用户对记录说做的修改,增加或删除记录都将反映到记录集中。支持全功能浏览(ACCESS不支持)。
Const adOpenStatic = 3 ‘静态游标,只是数据的一个快照,用户对记录说做的修改,增加或删除记录都不会反映到记录集中。支持向前或向后移动

Const adLockReadOnly = 1 ‘锁定类型,默认的,只读,不能作任何修改
Const adLockPessimistic = 2 ‘当编辑时立即锁定记录,最安全的方式
Const adLockOptimistic = 3 ‘只有在调用Update方法时才锁定记录集,而在此前的其他操作仍可对当前记录进行更改、插入和删除等
Const adLockBatchOptimistic = 4 ‘当编辑时记录不会被锁定,而更改、插入和删除是在批处理方式下完成的

Const adCmdText = &H0001
Const adCmdTable = &H0002
%>

18. 网页不会被缓存
HTM网页
<META HTTP-EQUIV=”pragma” CONTENT=”no-cache”>
<META HTTP-EQUIV=”Cache-Control” CONTENT=”no-cache, must-revalidate”>
<META HTTP-EQUIV=”expires” CONTENT=”Wed, 26 Feb 1997 08:21:57 GMT”>
或者<META HTTP-EQUIV=”expires” CONTENT=”0″>
ASP网页
Response.Expires = -1
Response.ExpiresAbsolute = Now() – 1
Response.cachecontrol = “no-cache”
PHP网页
header(“Expires: Mon, 26 Jul 1997 05:00:00 GMT”);
header(“Cache-Control: no-cache, must-revalidate”);
header(“Pragma: no-cache”);

19. 检查一段字符串是否全由数字组成
<script language=”javascript”><!–
function checkNum(str){return str.match(/\D/)==null}
alert(checkNum(“1232142141″))
alert(checkNum(“123214214a1″))
// –></script>

20. 获得一个窗口的大小
document.body.clientWidth,document.body.clientHeight

21. 怎么判断是否是字符
if (/[^\x00-\xff]/g.test(s)) alert(“含有汉字”);
else alert(“全是字符”);

22.TEXTAREA自适应文字行数的多少
<textarea rows=1 name=s1 cols=27 onpropertychange=”this.style.posHeight=this.scrollHeight”>
</textarea>

23. 日期减去天数等于第二个日期
<script language=javascript>
function cc(dd,dadd)
{
//可以加上错误处理
var a = new Date(dd)
a = a.valueOf()
a = a – dadd * 24 * 60 * 60 * 1000
a = new Date(a)
alert(a.getFullYear() + “年” + (a.getMonth() + 1) + “月” + a.getDate() + “日”)
}
cc(“12/23/2002″,2)
</script>

24. 选择了哪一个Radio
<HTML><script language=”vbscript”>
function checkme()
for each ob in radio1
if ob.checked then window.alert ob.value
next
end function
</script><BODY>
<INPUT name=”radio1″ type=”radio” value=”style” checked>Style
<INPUT name=”radio1″ type=”radio” value=”barcode”>Barcode
<INPUT type=”button” value=”check” onclick=”checkme()”>
</BODY></HTML>

25.获得本页url的request.servervariables(“”)集合
Response.Write “<TABLE border=1><!– Table Header –><TR><TD><B>Variables</B></TD><TD><B>value</B></TD></TR>”
for each ob in Request.ServerVariables
Response.Write “<TR><TD>”&ob&”</TD><TD>”&Request.ServerVariables(ob)&”</TD></TR>”
next
Response.Write “</TABLE>”

26.
本机ip<%=request.servervariables(“remote_addr”)%>
服务器名<%=Request.ServerVariables(“SERVER_NAME”)%>
服务器IP<%=Request.ServerVariables(“LOCAL_ADDR”)%>
服务器端口<%=Request.ServerVariables(“SERVER_PORT”)%>
服务器时间<%=now%>
IIS版本<%=Request.ServerVariables”SERVER_SOFTWARE”)%>
脚本超时时间<%=Server.ScriptTimeout%>
本文件路径<%=server.mappath(Request.ServerVariables(“SCRIPT_NAME”))%>
服务器CPU数量<%=Request.ServerVariables(“NUMBER_OF_PROCESSORS”)%>
服务器解译引擎<%=ScriptEngine & “/”& ScriptEngineMajorVersion &”.”&ScriptEngineMinorVersion&”.”& ScriptEngineBuildVersion %>
服务器操作系统<%=Request.ServerVariables(“OS”)%>

27.ENTER键可以让光标移到下一个输入框
<input onkeydown=”if(event.keyCode==13)event.keyCode=9″>

28. 检测某个网站的链接速度:
把如下代码加入<body>区域中:
<script language=javascript>
tim=1
setInterval(“tim++”,100)
b=1

var autourl=new Array()
autourl[1]=”www.njcatv.net
autourl[2]=”javacool.3322.net”
autourl[3]=”www.sina.com.cn
autourl[4]=”www.nuaa.edu.cn
autourl[5]=”www.cctv.com

function butt(){
document.write(“<form name=autof>”)
for(var i=1;i<autourl.length;i++)
document.write(“<input type=text name=txt”+i+” size=10 value=测试中……> =》<input type=text name=url”+i+” size=40> =》<input type=button value=GO onclick=window.open(this.form.url”+i+”.value)><br/>”)
document.write(“<input type=submit value=刷新></form>”)
}
butt()
function auto(url){
document.forms[0]["url"+b].value=url
if(tim>200)
{document.forms[0]["txt"+b].value=”链接超时”}
else
{document.forms[0]["txt"+b].value=”时间”+tim/10+”秒”}
b++
}
function run(){for(var i=1;i<autourl.length;i++)document.write(“<img src=http://”+autourl[i]+”/”+Math.random()+” width=1 height=1 onerror=auto(‘http://”;+autourl[i]+”‘)>”)}
run()</script>

29. 各种样式的光标
auto :标准光标
default :标准箭头
hand :手形光标
wait :等待光标
text :I形光标
vertical-text :水平I形光标
no-drop :不可拖动光标
not-allowed :无效光标
help :?帮助光标
all-scroll :三角方向标
move :移动标
crosshair :十字标
e-resize
n-resize
nw-resize
w-resize
s-resize
se-resize
sw-resize

滚动条
BODY
{
 scrollbar-face-color:#2C719A;
 scrollbar-shadow-color:#E6EEFF;
 scrollbar-highlight-color:#E6EEFF;
 scrollbar-3dlight-color:#2C719A;
 scrollbar-darkshadow-color:#2C719A;
 scrollbar-track-color:#fcfcfc;
 scrollbar-arrow-color:#ffffff;
    BACKGROUND-IMAGE: url(images/beijing.gif);
    FONT-SIZE: 9pt
}

META标签

禁止非法引用

<meta http-equiv=”window-target” content=”_top”>

设置网页期限

<meta http-equiv=”expires” content=”ww,dd mm yy hh:mm:ss gmt”>

禁止缓存

<meta http-equiv=”pragma” content=”no-cach”>

自动转向

<meta http-equiv=”refresh” content=”tt;url=url”>

设置cookie期限

<meta http-equiv=”set-cookie” content=”cookievalue=xxx;expires=week, dd mm yy hh
:mm:ss gmt;

path=/:>

设置页面关键字

<meta name=”keywords” content=”content1,content2″>

设置版权

<meta name=”author” content=”name”>

http://www.blueidea.com/

代码调试器
<html>
<HEAD>

<SCRIPT LANGUAGE=”JavaScript”>
<!– Begin
function displayHTML(form) {
var inf = form.htmlArea.value;
win = window.open(“, “, ‘popup’, ‘toolbar = no, status = no’);
win.document.write(“” + inf + “”);
}
//  End –>
</script>

</HEAD>

<body>
<form>
<textarea name=”htmlArea” cols=45 rows=6>
请在此处输入手工你的源代码或预览文字。。。。。。
</textarea>
<br>
<input type=”button” value=” view ” onclick=”displayHTML(this.form)”>
</form>
</body>
</html>


改变checkbox状态

  <input type=”checkbox” name=”checkbox” value=”checkbox” disabled>
  <input type=”submit” name=”Submit1″ value=”选取” onclick=”checkbox.checked=true”>
  <input type=”submit” name=”Submit2″ value=”不选” onclick=”checkbox.checked=false”>

弹出广告

java弹出窗口回当前窗口父页
<script lanaguage=javascript>alert(“提示内容!”);history.back()</script>


弹出窗口回到前几页
response.write”<SCRIPT language=JavaScript>alert(‘操作成功,您已修改此帐号资料!’);”
response.write”javascript:history.go(-2)</SCRIPT>”

弹出窗口回到特定页

response.write”<SCRIPT language=JavaScript>alert(‘操作成功,您已删除了此帐号!’);”
response.write”javascript:location.href=’viewuser.asp’</SCRIPT>”


按钮链接页面
<input type=”button” value=”提示内容” name=”B4″ style=”font-size: 9pt; ” onclick=”window.location.href=’register.asp’;” style=”font-size: 9pt”>

按钮回上一页
<input type=”button” value=”提示内容” name=”B4″ style=”font-size: 9pt; ” onclick=”history.back()” style=”font-size: 9pt”>

图片提交表单
<input type=”image” border=”0″ name=”imageField” src=”image/d_s4.gif” width=”22″ height=”18″ align=”middle” >

单位时间自动刷新到某页
<meta http-equiv=”refresh” content=”3;url=index.asp”>

java弹出窗口
<script>
function openpopup(){
var popurl6=”dk517.htm”
winpops=window.open(popurl6,”",”toolbar=no,location=no,directories=no,status=no,menubar=no,scrollbars=no,resizable=no,copyhistory=yes,top=100,width=500,height=460,”)
}

                  </script>

<a href=”javascript:openpopup()”><img border=”0″ src=”image/jinjiao.jpg” width=”118″ height=”76″></a>
&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; &nbsp;
                  <script>


java选择直接跳转页面
首先定义java function
<script language=”JavaScript”>
<!–
function MM_goToURL() { //v3.0
  var i, args=MM_goToURL.arguments; document.MM_returnValue = false;
  for (i=0; i<(args.length-1); i+=2) eval(args[i]+”.location=’”+args[i+1]+”‘”);
}
//–>
</script>

然后
<select size=”1″ name=”D1″ onChange=”MM_goToURL(‘parent’,this.value);return document.MM_returnValue”>
          <option>跳转页数</option>
          
          <option value=”w1.asp”>1</option>
          <option value=”w2.asp”>2</option>
        </select>


文本框样试
<input type=”text” name=”address1″ size=”20″ style=”background-attachment: scroll; background-repeat: repeat; font-size: 9pt; height: 18; width: 50; background-color: #FFFFFF; border: 1 solid #000000; background-position: none 0%”>


弹出无边窗口
<script language=javascript>

minimizebar=”minimize0826.gif”;   //窗口右上角最小化“按钮”的图片
minimizebar2=”minimize20826.gif”; //鼠标悬停时最小化“按钮”的图片
closebar=”close0826.gif”;         //窗口右上角关闭“按钮”的图片
closebar2=”close20826.gif”;       //鼠标悬停时关闭“按钮”的图片
icon=”icon0826.gif”;              //窗口左上角的小图标

function noBorderWin(fileName,w,h,titleBg,moveBg,titleColor,titleWord,scr)  //定义一个弹出无边窗口的函数,能数意义见下面“参数说明”,实际使用见最后的实例。
/*
——————参数说明——————-
fileName   :无边窗口中显示的文件。
w       :窗口的宽度。
h       :窗口的高度。
titleBg    :窗口“标题栏”的背景色以及窗口边框颜色。
moveBg     :窗口拖动时“标题栏”的背景色以及窗口边框颜色。
titleColor :窗口“标题栏”文字的颜色。
titleWord  :窗口“标题栏”的文字。
scr        :是否出现滚动条。取值yes/no或者1/0。
——————————————–
*/
{
  var contents=”<html>”+
               “<head>”+
         “<title>”+titleWord+”</title>”+
      “<meta http-equiv=\”Content-Type\” content=\”text/html; charset=gb2312\”>”+
      “<object id=hhctrl type=’application/x-oleobject’ classid=’clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11′><param name=’Command’ value=’minimize’></object>”+
      “</head>”+
               “<body topmargin=0 leftmargin=0 scroll=no onselectstart=’return false’ ondragstart=’return false’>”+
      “  <table height=100% width=100% cellpadding=0 cellspacing=1 bgcolor=”+titleBg+” id=mainTab>”+
      “    <tr height=18 style=cursor:default; onmousedown=’x=event.x;y=event.y;setCapture();mainTab.bgColor=\”"+moveBg+”\”;’ onmouseup=’releaseCapture();mainTab.bgColor=\”"+titleBg+”\”;’ onmousemove=’if(event.button==1)self.moveTo(screenLeft+event.x-x,screenTop+event.y-y);’>”+
      “      <td width=18 align=center><img height=12 width=12 border=0 src=”+icon+”></td>”+
      “      <td width=”+w+”><span style=font-size:12px;color:”+titleColor+”;font-family:宋体;position:relative;top:1px;>”+titleWord+”</span></td>”+
      “      <td width=14><img border=0 width=12 height=12 alt=最小化 src=”+minimizebar+” onmousedown=hhctrl.Click(); onmouseover=this.src=’”+minimizebar2+”‘ onmouseout=this.src=’”+minimizebar+”‘></td>”+
      “      <td width=13><img border=0 width=12 height=12 alt=关闭 src=”+closebar+” onmousedown=self.close(); onmouseover=this.src=’”+closebar2+”‘ onmouseout=this.src=’”+closebar+”‘></td>”+
      “    </tr>”+
      “    <tr height=*>”+
      “      <td colspan=4>”+
      “        <iframe name=nbw_v6_iframe src=”+fileName+” scrolling=”+scr+” width=100% height=100% frameborder=0></iframe>”+
      “      </td>”+
      “    </tr>”+
      “  </table>”+
      “</body>”+
      “</html>”;

  pop=window.open(“”,”_blank”,”fullscreen=yes”);
  pop.resizeTo(w,h);
  pop.moveTo((screen.width-w)/2,(screen.height-h)/2);
  pop.document.writeln(contents);

 
}
</script>

调用

</head>
<script language=”JavaScript”>
noBorderWin(‘index.asp’,'700′,’650′,’#0A3F74′,’#333333′,’#CCCCCC’,'黄浦实业有限公司智能办公系统’,'no’)
</script>


<!—————– 实例一(按钮),修改参数可改变窗口样式 —————–>
<button onclick=noBorderWin(‘test0826.html’,'400′,’240′,’#000000′,’#333333′,’#CCCCCC’,'一个无边窗口的测试例子’,'yes’);>open</button>

<br><br>

<!—————– 实例二(链接),修改参数可改变窗口样式 —————–>
<a href=#none onclick=noBorderWin(‘test0826.html’,'400′,’240′,’#000000′,’#333333′,’#CCCCCC’,'一个无边窗口的测试例子’,'yes’);>open</a>

<br><br>

<!—————– 实例三(图片),修改参数可改变窗口样式 —————–>
<img src=none height=30 width=60 alt=open style=”cursor:hand” onclick=noBorderWin(‘test0826.html’,'400′,’240′,’#000000′,’#333333′,’#CCCCCC’,'一个无边窗口的测试例子’,'no’);>无滚动条的

关闭母页弹出无边窗口实例
<html>
<head>
<OBJECT id=closes type=”application/x-oleobject” classid=”clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11″>
<param name=”Command” value=”Close”>
</OBJECT>
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
<script>

function Version()
{
var ver=”",p;
ver=navigator.appVersion;
p=ver.indexOf(“MSIE “);
ver=ver.substring(p+5,p+6);
return ver;
}
function exit()
{
var v;
v=Version();
if(v==”5″) closes.Click();
if(v==”6″) WebBrowser.ExecWB(45,1);
}
</script>
</head>
<script language=javascript>

minimizebar=”minimize0826.gif”;   //窗口右上角最小化“按钮”的图片
minimizebar2=”minimize20826.gif”; //鼠标悬停时最小化“按钮”的图片
closebar=”close0826.gif”;         //窗口右上角关闭“按钮”的图片
closebar2=”close20826.gif”;       //鼠标悬停时关闭“按钮”的图片
icon=”icon0826.gif”;              //窗口左上角的小图标

function noBorderWin(fileName,w,h,titleBg,moveBg,titleColor,titleWord,scr)  //定义一个弹出无边窗口的函数,能数意义见下面“参数说明”,实际使用见最后的实例。
/*
——————参数说明——————-
fileName   :无边窗口中显示的文件。
w       :窗口的宽度。
h       :窗口的高度。
titleBg    :窗口“标题栏”的背景色以及窗口边框颜色。
moveBg     :窗口拖动时“标题栏”的背景色以及窗口边框颜色。
titleColor :窗口“标题栏”文字的颜色。
titleWord  :窗口“标题栏”的文字。
scr        :是否出现滚动条。取值yes/no或者1/0。
——————————————–
*/
{
  var contents=”<html>”+
               “<head>”+
         “<title>”+titleWord+”</title>”+
      “<meta http-equiv=\”Content-Type\” content=\”text/html; charset=gb2312\”>”+
      “<object id=hhctrl type=’application/x-oleobject’ classid=’clsid:adb880a6-d8ff-11cf-9377-00aa003b7a11′><param name=’Command’ value=’minimize’></object>”+
      “</head>”+
               “<body topmargin=0 leftmargin=0 scroll=no onselectstart=’return false’ ondragstart=’return false’>”+
      “  <table height=100% width=100% cellpadding=0 cellspacing=1 bgcolor=”+titleBg+” id=mainTab>”+
      “    <tr height=18 style=cursor:default; onmousedown=’x=event.x;y=event.y;setCapture();mainTab.bgColor=\”"+moveBg+”\”;’ onmouseup=’releaseCapture();mainTab.bgColor=\”"+titleBg+”\”;’ onmousemove=’if(event.button==1)self.moveTo(screenLeft+event.x-x,screenTop+event.y-y);’>”+
      “      <td width=18 align=center><img height=12 width=12 border=0 src=”+icon+”></td>”+
      “      <td width=”+w+”><span style=font-size:12px;color:”+titleColor+”;font-family:宋体;position:relative;top:1px;>”+titleWord+”</span></td>”+
      “      <td width=14><img border=0 width=12 height=12 alt=最小化 src=”+minimizebar+” onmousedown=hhctrl.Click(); onmouseover=this.src=’”+minimizebar2+”‘ onmouseout=this.src=’”+minimizebar+”‘></td>”+
      “      <td width=13><img border=0 width=12 height=12 alt=关闭 src=”+closebar+” onmousedown=self.close(); onmouseover=this.src=’”+closebar2+”‘ onmouseout=this.src=’”+closebar+”‘></td>”+
      “    </tr>”+
      “    <tr height=*>”+
      “      <td colspan=4>”+
      “        <iframe name=nbw_v6_iframe src=”+fileName+” scrolling=”+scr+” width=100% height=100% frameborder=0></iframe>”+
      “      </td>”+
      “    </tr>”+
      “  </table>”+
      “</body>”+
      “</html>”;

  pop=window.open(“”,”_blank”,”fullscreen=yes”);
  pop.resizeTo(w,h);
  pop.moveTo((screen.width-w)/2,(screen.height-h)/2);
  pop.document.writeln(contents);

 
}
</script>
<script LANGUAGE=”JavaScript”>

<!– Begin
function leave() {
noBorderWin(‘http://localhost/hp/index.asp’,'700′,’650′,’#0A3F74′,’#333333′,’#CCCCCC’,'黄浦实业有限公司智能办公系统’,'no’)
}
// End –>
</script>
<body bgcolor=”#fef4d9″ onfocus=”window.setTimeout(‘exit()’,0)” onUnload=”leave()”>
</body>

妙用Start.exe命令

Windows的Command子目录中有一个Start.exe程序,利用它可以同时启动多个程序,帮助我
们完成许多事情。

在MS-DOS提示符下输入start/?,可以获得该命令的帮助。它有/m、/max、/r、/w这几个参数
。具体含义如下:

/m:以最小化的方式在后台运行新的程序。

/max:在当前窗口下以最大化的方式运行新的程序。

/r:在当前窗口下运行后台的程序。

/w:等待当前的程序执行完毕,再执行下一个程序。

我们可以通过这个命令来实现磁盘整理程序的自动运行。在“记事本”输入以下内容:

start /w scandskw /all /n

start defrag /all /f /noprompt

第一句的作用是启动磁盘扫描程序,让它扫描所有的本地硬盘。/n参数是指定非交互模式,
/w参数是让Windows等待,直到Scandskw完成任务之后再执行下一个命令。第二句是启动磁盘碎片整理程序,让它整理所有的本地硬盘。

输入完毕后,将文件另存为disk.bat(也可以是其他名字,但扩展名必须为BAT)。这样当你出
去办事情的时候,就可以双击运行disk.bat,让它来自动完成磁盘的扫描和整理工作。

Recordset对象方法详解
 

Recordset对象方法

Open方法

recordset.Open Source,ActiveConnection,CursorType,LockType,Options

Source
Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数,系统则采用Recordset对象的Source属性。

ActiveConnection
Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。

CursorType
Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据,包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic,分述如下:


常数 常数值 说明
adOpenForwardOnly 0 缺省值,启动一个只能向前移动的游标(Forward Only)
 
adOpenKeyset 1 启动一个Keyset类型的游标
adOpenDynamic 2 启动一个Dynamic类型的游标
adOpenStatic 3 启动一个Static类型的游标

以上几个游标类型将直接影响到Recordset对象所有的属性和方法,以下列表说明他们之间的区别。


Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic
AbsolutePage 不支持 不支持 可读写 可读写
AbsolutePosition 不支持 不支持 可读写 可读写
ActiveConnection 可读写 可读写 可读写 可读写
BOF 只读 只读 只读 只读
Bookmark 不支持 不支持 可读写 可读写
CacheSize 可读写 可读写 可读写 可读写
CursorLocation 可读写 可读写 可读写 可读写
CursorType 可读写 可读写 可读写 可读写
EditMode 只读 只读 只读 只读
EOF 只读 只读 只读 只读
Filter 可读写 可读写 可读写 可读写
LockType  可读写 可读写 可读写 可读写
MarshalOptions 可读写 可读写 可读写 可读写
MaxRecords  可读写 可读写 可读写 可读写
PageCount 不支持 不支持 只读 只读
PageSize 可读写 可读写 可读写 可读写
RecordCount 不支持 不支持 只读 只读
Source 可读写 可读写 可读写 可读写
State 只读 只读 只读 只读
Status 只读 只读 只读 只读
AddNew 支持 支持 支持 支持
CancelBatch 支持 支持 支持 支持
CancelUpdate 支持 支持 支持 支持
Clone 不支持 不支持  
Close 支持 支持 支持 支持
Delete 支持 支持 支持 支持
GetRows 支持 支持 支持 支持
Move 不支持 支持 支持 支持
MoveFirst 支持 支持 支持 支持
MoveLast 不支持 支持 支持 支持
MoveNext 支持 支持 支持 支持
MovePrevious 不支持 支持 支持 支持
NextRecordset 支持 支持 支持 支持
Open 支持 支持 支持 支持
Requery  支持 支持 支持 支持
Resync  不支持 不支持 支持 支持
Supports 支持 支持 支持 支持
Update 支持 支持 支持 支持
UpdateBatch  支持 支持 支持 支持

其中NextRecordset方法并不适用于Microsoft Access数据库。

LockType
Recordset对象Open方法的LockType参数表示要采用的Lock类型,如果忽略这个参数,那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等,分述如下:


常数 常数值 说明
adLockReadOnly 1 缺省值,Recordset对象以只读方式启动,无法运行AddNew、Update及Delete等方法
adLockPrssimistic 2 当数据源正在更新时,系统会暂时锁住其他用户的动作,以保持数据一致性
adLockOptimistic 3 当数据源正在更新时,系统并不会锁住其他用户的动作,其他用户可以对数据进行增、删、改的操作
 
adLockBatchOptimistic 4 当数据源正在更新时,其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、删、改的操作
 

Options
Recordset对象Open方法的Options参数表示对数据库请求的类型,Options参数包含adCmdText、adCmdTable、adCmdStoredProc及adCmdUnknown等,分述如下:  


常数 常数值 说明
 
adCmdUnknown -1 缺省值,表示指定的CommandText参数类型无法确定
adCmdText 1 表示指定的CommandText参数是一般的命令类型
adCmdTable 2 表示指定的CommandText参数是一个存在的表的名称
adCmdStoredProc 3 表示指定的CommandText参数是Stored Procedure的名称
 

robots.txt和Robots META标签

——————————————————————————–


作者:平文胜我们知道,搜索引擎都有自己的“搜索机器人”(ROBOTS),并通过这些ROBOTS在网络上沿着网页上的链接(一般是http和src链接)不断抓取资料建立自己的数据库。 对于网站管理者和内容提供者来说,有时候会有一些站点内容,不希望被ROBOTS抓取而公开。为了解决这个问题,ROBOTS开发界提供了两个办法:一个是robots.txt,另一个是The Robots META标签。

一、 robots.txt

1、 什么是robots.txt?

robots.txt是一个纯文本文件,通过在这个文件中声明该网站中不想被robots访问的部分,这样,该网站的部分或全部内容就可以不被搜索引擎收录了,或者指定搜索引擎只收录指定的内容。

当一个搜索机器人访问一个站点时,它会首先检查该站点根目录下是否存在robots.txt,如果找到,搜索机器人就会按照该文件中的内容来确定访问的范围,如果该文件不存在,那么搜索机器人就沿着链接抓取。

robots.txt必须放置在一个站点的根目录下,而且文件名必须全部小写。

网站 URL
相应的 robots.txt的 URL

http://www.w3.org/

http://www.w3.org/ robots.txt

http://www.w3.org:80/
http://www.w3.org:80/ robots.txt

http://www.w3.org:1234/

http://www.w3.org:1234/ robots.txt

http://w3.org/
http://w3.org/ robots.txt


2、 robots.txt的语法

“robots.txt”文件包含一条或更多的记录,这些记录通过空行分开(以CR,CR/NL, or NL作为结束符),每一条记录的格式如下所示:

    ”<field>:<optionalspace><value><optionalspace>”。

在该文件中可以使用#进行注解,具体使用方法和UNIX中的惯例一样。该文件中的记录通常以一行或多行User-agent开始,后面加上若干Disallow行,详细情况如下:

User-agent:

该项的值用于描述搜索引擎robot的名字,在”robots.txt”文件中,如果有多条User-agent记录说明有多个robot会受到该协议的限制,对该文件来说,至少要有一条User-agent记录。如果该项的值设为*,则该协议对任何机器人均有效,在”robots.txt”文件中, “User-agent:*”这样的记录只能有一条。

Disallow :

该项的值用于描述不希望被访问到的一个URL,这个URL可以是一条完整的路径,也可以是部分的,任何以Disallow 开头的URL均不会被robot访问到。例如”Disallow: /help”对/help.html 和/help/index.html都不允许搜索引擎访问,而”Disallow: /help/”则允许robot访问/help.html,而不能访问/help/index.html。

任何一条Disallow记录为空,说明该网站的所有部分都允许被访问,在”/robots.txt”文件中,至少要有一条Disallow记录。如果 “/robots.txt”是一个空文件,则对于所有的搜索引擎robot,该网站都是开放的。

下面是一些robots.txt基本的用法:

l 禁止所有搜索引擎访问网站的任何部分:
User-agent: *
Disallow: /

l 允许所有的robot访问
User-agent: *
Disallow:
或者也可以建一个空文件 “/robots.txt” file

l 禁止所有搜索引擎访问网站的几个部分(下例中的cgi-bin、tmp、private目录)
User-agent: *
Disallow: /cgi-bin/
Disallow: /tmp/
Disallow: /private/

l 禁止某个搜索引擎的访问(下例中的BadBot)
User-agent: BadBot
Disallow: /

l 只允许某个搜索引擎的访问(下例中的WebCrawler)
User-agent: WebCrawler
Disallow:

User-agent: *
Disallow: /

3、 常见搜索引擎机器人Robots名字

名称 搜索引擎

Baiduspider http://www.baidu.com

Scooter http://www.altavista.com

ia_archiver http://www.alexa.com

Googlebot http://www.google.com

FAST-WebCrawler http://www.alltheweb.com

Slurp http://www.inktomi.com

MSNBOT http://search.msn.com


4、 robots.txt举例

下面是一些著名站点的robots.txt:

http://www.cnn.com/robots.txt

http://www.google.com/robots.txt

http://www.ibm.com/robots.txt

http://www.sun.com/robots.txt

http://www.eachnet.com/robots.txt


5、 常见robots.txt错误

l 颠倒了顺序:
错误写成
User-agent: *
Disallow: GoogleBot

正确的应该是:
User-agent: GoogleBot
Disallow: *

l 把多个禁止命令放在一行中:
例如,错误地写成
Disallow: /css/ /cgi-bin/ /images/

正确的应该是
Disallow: /css/
Disallow: /cgi-bin/
Disallow: /images/

l 行前有大量空格
例如写成
Disallow: /cgi-bin/
尽管在标准没有谈到这个,但是这种方式很容易出问题。

l 404重定向到另外一个页面:
当Robot访问很多没有设置robots.txt文件的站点时,会被自动404重定向到另外一个Html页面。这时Robot常常会以处理robots.txt文件的方式处理这个Html页面文件。虽然一般这样没有什么问题,但是最好能放一个空白的robots.txt文件在站点根目录下。

l 采用大写。例如
USER-AGENT: EXCITE
DISALLOW:
虽然标准是没有大小写的,但是目录和文件名应该小写:
user-agent:GoogleBot
disallow:

l 语法中只有Disallow,没有Allow!
错误的写法是:
User-agent: Baiduspider
Disallow: /john/
allow: /jane/

l 忘记了斜杠/
错误的写做:
User-agent: Baiduspider
Disallow: css

正确的应该是
User-agent: Baiduspider
Disallow: /css/

下面一个小工具专门检查robots.txt文件的有效性:

http://www.searchengineworld.com/cgi-bin/robotcheck.cgi

二、 Robots META标签

1、什么是Robots META标签

Robots.txt文件主要是限制整个站点或者目录的搜索引擎访问情况,而Robots META标签则主要是针对一个个具体的页面。和其他的META标签(如使用的语言、页面的描述、关键词等)一样,Robots META标签也是放在页面的<head></head>中,专门用来告诉搜索引擎ROBOTS如何抓取该页的内容。具体的形式类似(见黑体部分):

<html>

<head>

<title>时代营销–网络营销专业门户</title>

<meta name=”Robots” content=”index,follow”>

<meta http-equiv=”Content-Type” CONTENT=”text/html; charset=gb2312″>

<meta name=”keywords” content=”营销… “>

<meta name=”description” content=”时代营销网是…”>

<link rel=”stylesheet” href=”/public/css.css” type=”text/css”>

</head>

<body>

</body>

</html>

2、Robots META标签的写法:

Robots META标签中没有大小写之分,name=”Robots”表示所有的搜索引擎,可以针对某个具体搜索引擎写为name=”BaiduSpider”。content部分有四个指令选项:index、noindex、follow、nofollow,指令间以“,”分隔。

INDEX 指令告诉搜索机器人抓取该页面;

FOLLOW 指令表示搜索机器人可以沿着该页面上的链接继续抓取下去;

Robots Meta标签的缺省值是INDEX和FOLLOW,只有inktomi除外,对于它,缺省值是INDEX,NOFOLLOW。

这样,一共有四种组合:

<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>

<META NAME=”ROBOTS” CONTENT=”NOINDEX,FOLLOW”>

<META NAME=”ROBOTS” CONTENT=”INDEX,NOFOLLOW”>

<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>

其中

<META NAME=”ROBOTS” CONTENT=”INDEX,FOLLOW”>可以写成

<META NAME=”ROBOTS” CONTENT=”ALL”>;

<META NAME=”ROBOTS” CONTENT=”NOINDEX,NOFOLLOW”>可以写成

<META NAME=”ROBOTS” CONTENT=”NONE”>

要注意的是:上述的robots.txt和Robots META标签限制搜索引擎机器人(ROBOTS)抓取站点内容的办法只是一种规则,需要搜索引擎机器人的配合才行,并不是每个ROBOTS都遵守的。

目前看来,绝大多数的搜索引擎机器人都遵守robots.txt的规则,而对于Robots META标签,目前支持的并不多,但是正在逐渐增加,如著名搜索引擎GOOGLE就完全支持,而且GOOGLE还增加了一个指令“archive”,可以限制GOOGLE是否保留网页快照。例如:

<META NAME=”googlebot” CONTENT=”index,follow,noarchive”>

表示抓取该站点中页面并沿着页面中链接抓取,但是不在GOOLGE上保留该页面的网页快照

在ASP编程中,经常需要在HTML表格内显示Recordset,而HTML和ASP代码的交错编 写,使ASP编程从创作的乐趣变为沉重的负担。这里,给你介绍一种新技术──数据捆绑,可以帮你解决这个问 题。 本文以一个新闻列表程序为例,对新、旧技术进行比较。

一、传统的显示方式

以前,为了在表格内显示这个ADOR.Recordset的内容,我们需要如下代码段:

<%’打开数据库%>

<TABLE>

<tr>

<td>新闻标题</td>

<td>内容提要</td>

<td>日期</td>

</tr>

<%Do%>

<tr>

<td><%=recordset(“Title”)%></td>

<td><%=recordset(“Content”)%></td>

<td><%=recordset(“Date”)%></td>

</tr>

<%

recordset.MoveNext

Loop until recordset.Eof

%>

</TABLE>

这种方式,编程十分繁琐,并且,整个表格要在所有代码执行完毕后才在浏览器中显 示,等待时间较长 。并且,将来改变页面样式时,还要特别小心地避免把ASP代码错误地删除或改变。

二、数据捆绑技术

数据捆绑技术可使用在4.0以上版本的IE浏览器中,网页制作者可以灵活地改变页面 风格而无需担心破 坏数据显示代码,因为数据和页面是分离的,相关代码也很少。只要简单地设置<TABLE>标签 的属性,就可以把 一个数据源和HTML表格捆绑在一起。当数据更新时,只刷新中间显示数据的部分,而页面的 其他部分不变,就 好像没有刷新一样,显示效果更加好;因为只下载了数据,网页的其他部分没有重复下载, 浏览速度更快。如果 灵活使用,还可以实现无刷新搜索和分页等功能。 目前随IE浏览器发行的数据源主要有两种:XML数据岛和TDC控件。我们以XML数据岛 为例,使用数据捆 绑技术实现上面提到的新闻列表程序。

1.XML数据岛

在HTML中,可以加入<XML>标签,从而在HTML内部嵌入XML格式的数据,或者引用外部 的XML格式的文件 。 比如一个新闻系统的XML标签可能是这样:

<XML>
<?xml version=”1.0″ encoding=”gb2312″?>
<root> <news>
<title>标题1</title>

<content>内容1</content>

<date>日期1</date>

</news>

<news>

<title>标题2</title>

<content>内容2</content>

<date>日期2</date>

</news>

<news>

<title>标题3</title>

<content>内容3</content>

<date>日期3</date>

</news>

……

</root>

</XML>

 

在这些XML数据中, <?xml version=”1.0″ encoding=”gb2312″?>表示了XML文档的开 始,并且指定了 数据的编码方式。如果不指定,默认值UTF-8将导致中文无法正常显示。

<root>和</root>是XML的根元素,没 有什么意义,仅仅表示数据的开始和结束。在<root>和</root>之间,每一个<news></news> 都是一条记录。通 过设置<XML>标签的ID属性,可以通过脚本访问这些数据,也可以它与<TABLE>捆绑在一起。<XML> 的另外一种使用方式:引用外部XML格式文件的格式是这样的: <XML src=”外部XML格式文件的地址”></XML>

同样,这种格式的<XML>标签也可以设置ID属性,并且外部文件只要在格式上符合XML标准即可,而扩 展名不一定非要是XML。

2.<TABLE>标签的属性设置

<TABLE>有一个DataSrc属性用以指定数据源。比如,有一个名为:XMLDSO1的XML数据 岛作为数据源, <TABLE>的写法就是: <TABLE DataSrc=”#XMLDSO1″> 注意,要在引用的数据源名称前加#号。 规范的<TABLE>有三个部分: <THEAD>、<TBODY>和<TFOOT>。在数据捆绑技术中,通常 把表头和表尾分 别写在<THEAD>和<TFOOT>中,在其中写一些表格标题之类的文字。而<TBODY>可以对数据源提 供的数据进行循 环显示,所以要把显示数据的部分放在<TBODY>中,只需要编辑一行关于表格显示的HTML代码 ,就可以实现所有 数据统一格式的显示。但是,<TD> 标签不能与数据源绑在一起,所以需要在<TD> 里加一个可 以捆绑的<DIV>标签 作为数据的容器。例如:

<TABLE DataSrc=”#XMLDSO1″>

<thead>

<tr>

<td>新闻标题</td>

<td>内容提要</td>

<td>日期</td>

</tr>

</thead>

<tbody>

<tr>

<td><div DataFld=”title”></td>

<td><div DataFld=”content”></td>

<td><div DataFld=”date”></td>

</tr>

</tbody>

</TABLE>

这就是一个完整的显示数据的表格代码。怎么样?比HTML和ASP混杂在一起的代码要 简单明了得多吧?

3.数据源的实现

上面的代码将一个HTML表格与一个名为XMLDSO1的数据源捆绑在一起。上面已经提到 ,XML数据岛引用 的外部XML文件只要在格式上符合XML标准即可,扩展名不一定是XML。所以,我们可以通? 鼳SP产生XML格式的 输出,然后通过HTML的<XML>标签与表格捆绑在一起:<XML id=”XMLDSO1″ src=”search.asp”></XML>  在search.asp中输出XML格式的数据,前面的HTML就可以自动显示数据了。有几点要 注意的地方:XML 的标签是区分大小写的!并且所有的标签都要关闭,即使用“/”开头的标签表示关闭,输出 时一定要注意匹配 ;ASP默认的Content-Type是text/html,在这里需要通过Response.ContentType=”text/xml “来设置一下, 使浏览器把输出结果当作XML来处理。 示例代码: 在后台提供数据的search.asp文件:

<%

‘打开数据库,取得记录集

Response.ContentType=”text/xml”

outputXML=”<?xml version=”"1.0″” encoding=”"gb2312″”?><root>”

Do

outputXML=outputXML &”<news>”

outputXML=outputXML &”<title>”& recordset(“Title”) &”</title>”

outputXML=outputXML &”<content>”& recordset(“content”) &”</content>”

outputXML=outputXML &”<date>”& recordset(“Date”) &”</date>”

outputXML=outputXML &”</news>”

rs.movenext

loop until rs.eof

outputXML=outputXML &”</root>”

Response.Write outputXML

%>
在前台设置数据显示样式的list.html文件: <html> <body> <XML id=”XMLDSO1″ src=”search.asp”></XML>
<TABLE DataSrc=”#XMLDSO1″>

<thead>

<tr>

<td>新闻标题</td>

<td>内容提要</td>

<td>日期</td>

</tr>

</thead>

<tbody>

<tr>

<td><div DataFld=”title”></td>

<td><div DataFld=”content”></td>

<td><div DataFld=”date”></td>

</tr>

</tbody>

</TABLE>

</body>

</html>

以上代码通过修改,还可以实现搜索功能,只要把要搜索的内容传给search.asp,ASP程序只输出搜 索结果即可。 怎么样?还想旧的混合代码方式吗?还不快用数据捆绑技术美化你的网页。

实例解析
  1.定义新标识。
  2.建立XML文档。
  3.建立相应的HTML文件。

XML在不同领域有着广泛的应用,比如在科技领域的MathML,无线通信应用的WML,在网络图象方面的SVG等等,我们这里侧重讨论XML在web上的应用。XML在web上应用主要是利用其强大的数据操作能力。一般用XML配合javascript和asp等服务器端程序,可以实现网络上几乎所有的应用需求。

考虑讲解方便,我们在下面介绍一个简单的实例,不包含服务器端程序。目的在于让您对XML的数据操作能力有一个感性的认识。

好,我们首先[ 点击这里 ]来看实例的效果。(请用IE5.0以上版本浏览器打开)

这是一个简单的CD唱片数据检索功能。你通过点击”上一张”,”下一张”可以看到单张CD的有关信息。这样的效果我们原来用两种方法可以实现:

1.利用DHTML,将数据隐藏在不同的层中,通过鼠标事件依次显示;

2.利用后台程序(如ASP,CGI,PHP,JSP等),调用服务器端的数据。

但是在这个实例中,我们打开页面原代码可以看到,其中没有用DHTML的DIV,也没有表单的action,它完全是用XML来实现的。下面我们来分析它的制作过程:

第一步:定义新标识。
根据实际的CD数据,首先新建一个名为<CD>的标识;其次建立它相关的数据标识,分别是:CD名称<Title>,演唱者<Artist>,出版年代<Year>,国家<Country>,发行公司<Company>和价格<Price>;最后还要建立一个名为目录<CATALOG>的标识。为什么要再建立一个<CATALOG>标识呢?因为在XML文档中规定,必须且只能有一个根元素(标识),我们有多个CD数据,这些数据是并列的关系,所以需要为这些并列的元素建立一个根元素。
以上元素的定义和关系都完全符合XML标准,不需要特别的DTD文件来定义,所以可以省略DTD定义。如果我们想使用DTD来定义,以上过程可以表示为:

<!ELEMENT CATALOG (CD)*>
<!ELEMENT CD (Title,Artist,Year,Country,Company,Price)>
<!ELEMENT Title (#PCDATA)>
<!ELEMENT Artist (#PCDATA)>
<!ELEMENT Year (#PCDATA)>
<!ELEMENT Country (#PCDATA)>
<!ELEMENT Company (#PCDATA)>
<!ELEMENT Price (#PCDATA)>

这段代码表示:元素CATALOG包含多个CD子元素,而子元素CD又依次包含Title, Artist, Year, Country, Company, Price 六个子元素,它们的内容都定义为文本(字符,数字,文本)。(注:具体的语法说明可以看上一章关于DTD的介绍)

第二步:建立XML文档。

<?xml version=”1.0″?>
<CATALOG>
<CD>
<TITLE>Empire Burlesque</TITLE>
<ARTIST>Bob Dylan</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>Columbia</COMPANY>
<PRICE>10.90</PRICE>
<YEAR>1985</YEAR>
</CD>
<CD>
<TITLE>Hide your heart</TITLE>
<ARTIST>Bonnie Tylor</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>CBS Records</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1988</YEAR>
</CD>
<CD>
<TITLE>Greatest Hits</TITLE>
<ARTIST>Dolly Parton</ARTIST>
<COUNTRY>USA</COUNTRY>
<COMPANY>RCA</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1982</YEAR>
</CD>
<CD>
<TITLE>Still got the blues</TITLE>
<ARTIST>Gary More</ARTIST>
<COUNTRY>UK</COUNTRY>
<COMPANY>Virgin redords</COMPANY>
<PRICE>10.20</PRICE>
<YEAR>1990</YEAR>
</CD>
<CD>
<TITLE>Eros</TITLE>
<ARTIST>Eros Ramazzotti</ARTIST>
<COUNTRY>EU</COUNTRY>
<COMPANY>BMG</COMPANY>
<PRICE>9.90</PRICE>
<YEAR>1997</YEAR>
</CD>
</CATALOG>

上面代码首先用<?xml version=”1.0″?>声明语句表明这是一个XML文档,它的格式遵守XML 1.0标准规范。然后是文档内容,结构树非常清晰:
<CATALOG>
<CD>
……
</CD>
<CD>
……
</CD>

</CATALOG>
一共定义了5组数据。我们将上面的代码存为cd.xml文件,以备调用。


第三步:建立相应的HTML文件。
1.导入XML数据。
我们知道,目前流行的浏览器中,暂时只有微软的IE5.0以上版本浏览器支持XML。IE是通过在HTML中的object物件来支持插入XML,并通过js的XMLDocument.load()方法来导入数据。我们看代码:
<object WIDTH=”0″ HEIGHT=”0″ CLASSID=”clsid:550dda30-0541-11d2-9ca9-0060b0ec3d39″ ID=”xmldso”>
</object>

定义一个object,ID名为xmldso。然后在head区用js引入xml数据:

<script for=”window” event=”onload”>
xmldso.XMLDocument.load(“cd.xml”);
</script>

2.捆绑数据。
然后将用<SPAN>标识来将XML数据绑定在表格中。其中ID,DATASRC,DTATFLD都是<SPAN>的属性。代码如下:

<table>
<tr><td>Title:</td><td><SPAN ID=”title” DATASRC=#xmldso DATAFLD=”TITLE”></SPAN></td></tr>
<tr><td>Artist:</td><td><SPAN ID=”artist” DATASRC=#xmldso DATAFLD=”ARTIST”></SPAN></td></tr>
<tr><td>Year:</td><td><SPAN ID=”year” DATASRC=#xmldso DATAFLD=”YEAR”></SPAN></td></tr>
<tr><td>Country:</td><td><SPAN ID=”country” DATASRC=#xmldso DATAFLD=”COUNTRY”></SPAN></td></tr>
<tr><td>Company:</td><td><SPAN ID=”company” DATASRC=#xmldso DATAFLD=”COMPANY”></SPAN></td></tr>
<tr><td>Price:</td><td><SPAN ID=”price” DATASRC=#xmldso DATAFLD=”PRICE”></SPAN></td></tr>
</table>

3.动作操作。
最后,为数据提供浏览按钮:
<INPUT TYPE=button value=”上一张CD” onCLICK=”moveprevious()”>
<INPUT TYPE=button value=”下一张CD” onCLICK=”movenext()”>

并利用js来完成两个鼠标点击功能:movenext()和moveprevious()。在head区加入如下代码:

<script language=”javascript”>
function movenext()
{
if (xmldso.recordset.absoluteposition < xmldso.recordset.recordcount)
{
xmldso.recordset.movenext();
}
}
function moveprevious()
{
if (xmldso.recordset.absoluteposition > 1)
{
xmldso.recordset.moveprevious();
}
}
</script>

受<! #include file=”filename.asp” –> 宏限制
必须存在该文件并且会预先编译(不管前面是否加以条件)

经常有这样的要求,根据不同的需求要求include不同的文件
如各个人的不同设置,所以要求能动态include文件。

代码如下:

Function include(filename)
 Dim re,content,fso,f,aspStart,aspEnd
 
 set fso=CreateObject(“Scripting.FileSystemObject”)
 set f=fso.OpenTextFile(server.mappath(filename))
 content=f.ReadAll
 f.close
 set f=nothing
 set fso=nothing
 
 set re=new RegExp
 re.pattern=”^\s*=”
 aspEnd=1
 aspStart=inStr(aspEnd,content,”<%”)+2
 do while aspStart>aspEnd+1
  Response.write Mid(content,aspEnd,aspStart-aspEnd-2)
  aspEnd=inStr(aspStart,content,”%\>”)+2
  Execute(re.replace(Mid(content,aspStart,aspEnd-aspStart-2),”Response.Write “))
  aspStart=inStr(aspEnd,content,”<%”)+2
 loop
 Response.write Mid(content,aspEnd)
 set re=nothing
End Function

使用范例:

include(“youinc.asp”)

基于Web的XML数据搜索与查询

李 元 
01-10-15 下午 12:16:13

——————————————————————————–
 

使用XML数据源对象DSO(Data Source Object)可把HTML元素绑定到XML数据集,在客户(浏览器)端使用VBScript,JavaScript以及更新的C#与VB7等编写代码对XML数据进行处理,包括对XML数据进行搜索与查询。对于微软的IE5.0以上浏览器,可以在HTML页中用标记<XML>将XML元素直接嵌入在<XML>与</XML>之间使用,也可以利用<XML>标记的SRC属性将XML数据文挡作为外部文挡使用,作为外部文件使用的优点是:XML数据传到了客户的机器的缓冲区,但是在HTML页面文件上看不见,通过存盘也得不到,在一定程度上保护了原始数据。
本文以“唐诗300首查询”为例,设计一个XML文挡(ts300.xml)和一个HTML页面(ts300.html),在页面里通过<XML>标记的SRC属性将XML数据文挡ts300.xml作为外部文挡使用,用VBScript编写代码实现对唐诗300首的浏览、查询;浏览ts300.html的效果如下:
 
 
(1)唐诗300首XML文挡ts300.xml:
 
《唐诗300首》由300首唐诗组成,每首唐诗由诗名、作者和诗句组成,作成它的XML文挡时,对每首诗增加编号和图片(下面列出一首):
 
<?xml version=”1.0″ encoding=”GB2312″ standalone=”yes”?>
<ts300>
<poem>
<bh>013</bh>
<author>王维</author>
<title>送别</title>
<text>下马饮君酒,问君何所之。君言不得意,归卧南山陲。但去莫复闻,白云无尽时。</text>
<picture>images/002.gif</picture>
</poem>
 
</ts300>
 
(2)HTML页面ts300.html
 
页面首先使用:
 
<xml src=”ts300.xml” id=”TS300″></xml> 
 
将上面设计的XML文挡ts300.xml引入,并将其标识为TS300,页面上的VBScript代码通过这个标识处理ts300.xml中的数据:每首诗(即<poem>与</poem>间的内容)是一条记录(Recordset),每条记录中的一款是一个字段(Fields),因此:
 
TS300.recordset.Fields(“author”)
 
得到唐诗300首(ts300.xml)当前记录下(一首诗)的作者;页面用VBScript定义了下列函数来对XML数据进行交互处理:
 
(1)Display() : 在各文本框里分别显示当前记录的XML数据:作者、诗名与诗句
(2)Search0() : 顺序浏览XML纪录
(3)Search1() : 按用户输入的作者名进行查询(每次查询从第一条记录开始),找到有关记
录后调用Display显示
(4)Search2() : 按选择框的内容查询,找到有关记录后调用Display显示
 
页面完整代码如下,其中用CSS样式语句设置文本框的字体字号和颜色:
 
<xml src=”ts300.xml” id=”TS300″></xml>
<center><font color=red><h1>基于XML的唐诗三百首查询</h1></font></center>
<BODY background=”b01.gif”>
<style type=’text/css’>
<!–
body,input {font-size :12pt;color=blue}
TEXTAREA {font-size :12pt;}
–>
</style>
 
<script language=”vbscript”>
<!–
 
Sub Display() 
‘各文本框将显示当前记录XML数据
sj.value=TS300.recordset.Fields(“text”)
zz.value=TS300.recordset.Fields(“author”)
sm.value=TS300.recordset.Fields(“title”)
End Sub
 
Sub Search0()
‘记录指针指向下一条纪录
If (Not TS300.Recordset.EOF) Then 
TS300.Recordset.MoveNext
Else
TS300.Recordset.MoveFirst
End If 
‘调用Display(),各文本框将显示当前记录XML数据
Display
End Sub
 
 
Sub Search1() ‘作者查询
‘每次查询从第一条记录开始
Do 
If TS300.recordset.Fields(“author”)=zzcx.value Then
EXIT Do
End if 
If (Not TS300.Recordset.EOF) Then 
TS300.Recordset.MoveNext
Else
EXIT Do
End If
Loop
 
IF TS300.recordset.Fields(“author”)<>zzcx.value Then
Search0
MsgBox(“没查到!”)
 
Else
MsgBox(“查到!”)
Display
End If
End Sub
 
 
Sub Search2() ‘选择查询
‘每次查询从第一条记录开始
TS300.Recordset.MoveFirst
‘如果XML记录中字段author的名字与选择栏名字不同,往下移动一条记录
Do 
If TS300.recordset.Fields(“author”)=gdcx.value Then
EXIT Do
End if 
If (Not TS300.Recordset.EOF) Then 
TS300.Recordset.MoveNext
Else
EXIT Do
End If
Loop
 
If (Not TS300.Recordset.EOF) Then
MsgBox(“查到了!”)
Display
End If
End Sub
–>
</script>
<!–安置文本框 –>
<pre>
键入作者名查询: <input name=”zzcx”>
选择作者名查询: <select name=”gdcx”>
<option value=”张九龄”>张九龄
<option value=”李白”>李白
<option value=”杜甫”>杜甫
<option value=”王维”>王维
</select>
<hr><center><font color=blue><h2>查询结果:</center></font></h2>
 
诗 名: <input name=”sm”>
作 者: <input name=”zz”> 
诗 句: <TEXTAREA name=”sj” ROWS=3 COLS=48> </TEXTAREA>
 
</pre>
<center><table> <!–安置按纽,建立按纽事件调用 –>
<td><input type=”button” value=”作者查询” onClick=”Search1″ ></input></td>
<td><input type=”button” value=”选择查询” onClick=”Search2″ ></input></td>
<td><input type=”button” value=”浏 览” onClick=”Search0″ ></input></td>
</table></center>
 

ADO如何取得数据库中表的字段信息
 

若要取得数据库中表的字段信息,由以下RecordSet对象的属性可得知:

ActualSize属性:字段的实际大小。
DefinedSize属性:定义字段的大小。
Type属性:字段类型,使用以下数字代表之:
文字text:200
日期时间date:135
整数int/识别码:3
单精准度:4
双精准度:5
备注memo:201
是否yes/no:17
Name属性:字段名称。
NumericScale属性:字段小数部份的位数。
Precision属性:字段的整数和小数位数部份加起来的最多位数。
取得数据库中表的字段信息例子

让我们看一个在ASP程式码当中使用ActualSize/DefinedSize/ Type/Name/NumericScale/Precision的例子。

譬如ASP程式码rs2.asp如下:

<%

Set conn1 = Server.CreateObject(“ADODB.Connection”)

conn1.Open “DBQ=”& Server.MapPath(“ntopsamp.mdb”) &”;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;”

Set rs1 = Server.CreateObject(“ADODB.Recordset”)

rs1.Open “产品”,conn1,1,3

Response.Write “text<BR>”

Response.Write “ActualSize: ” & rs1(“名称”).ActualSize & “<BR>”

Response.Write “DefinedSize: ” &rs1(“名称”).DefinedSize & “<BR>”

Response.Write “Type: ” & rs1(“名称”).Type & “<BR>”

Response.Write “Name: ” & rs1(“名称”).Name & “<BR>”

Response.Write “NumericScale: ” & rs1(“名称”).NumericScale & “<BR>”

Response.Write “Precision: ” & rs1(“名称”).Precision & “<p>”

Response.Write “date<BR>”

Response.Write “ActualSize: ” & rs1(“日期”).ActualSize & “<BR>”

Response.Write “DefinedSize: ” & rs1(“日期”).DefinedSize & “<BR>”

Response.Write “Type: ” & rs1(“日期”).Type & “<BR>”

Response.Write “Name: ” & rs1(“日期”).Name & “<BR>”

Response.Write “NumericScale: ” & rs1(“日期”).NumericScale & “<BR>”

Response.Write “Precision: ” & rs1(“日期”).Precision & “<p>”

Response.Write “int/识别码<BR>”

Response.Write “ActualSize: ” & rs1(“价格”).ActualSize & “<BR>”

Response.Write “DefinedSize: ” & rs1(“价格”).DefinedSize & “<BR>”

Response.Write “Type: ” & rs1(“价格”).Type & “<br>”

Response.Write “Name: ” & rs1(“价格”).Name & “<BR>”

Response.Write “NumericScale: ” & rs1(“价格”).NumericScale & “<BR>”

Response.Write “Precision: ” & rs1(“价格”).Precision & “<p>”

Response.Write “memo<BR>”

Response.Write “ActualSize: ” & rs1(“备注”).ActualSize & “<BR>”

Response.Write “DefinedSize: ” & rs1(“备注”).DefinedSize & “<BR>”

Response.Write “Type: ” & rs1(“备注”).Type & “<BR>”

Response.Write “Name: ” & rs1(“备注”).Name & “<BR>”

Response.Write “NumericScale: ” & rs1(“备注”).NumericScale & “<BR>”

Response.Write “Precision: ” & rs1(“备注”).Precision & “<p>”

Response.Write “yes<BR>”

Response.Write “ActualSize: ” & rs1(“删除”).ActualSize & “<BR>”

Response.Write “DefinedSize: ” & rs1(“删除”).DefinedSize & “<BR>”

Response.Write “Type: ” & rs1(“删除”).Type & “<p>”

%>

以上的 ASP程式码rs2.asp,於用户端使用浏览器,浏览执行的结果,显示各字段的字段信息,包括字段实际大小(ActualSize)、定义的字段大小(DefinedSize)、字段类型(Type)、字段名称(Name)、字段小数部份的位数(NumericScale)、整数和小数位数最多位数(Precision)等。

Attributes/State属性

若要取得更详细的数据库中表的字段信息,譬如此字段是否包括固定长度的资料、可接受Null的资料值、是否为自动编号的识别码等,由以下RecordSet对象的属性可得知:

Field对象的Attributes属性:代表字段的状态,由以下值相加:
&H00000002:此字段为memo类型。
&H00000004:此字段可写入资料。
&H00000008:不确定此字段是否可写入资料。
&H00000010:此字段包括固定长度的资料。
&H00000020:此字段可接受Null的资料值。
&H00000040:可能读取到此字段为Null的资料值。
&H00000080:此字段为长位元(long binary)字段,可使用AppendChunk和GetChunk方法。
&H00000100:此字段包括自动编号的识别码。
&H00000200:此字段包括日期时间。
&H00001000:此字段使用cache。
接前一个例子:

    Connection 对象的Attributes属性:代表数据库连线的状态,由以下值相加,预设值为0:
&H00020000:正在呼叫CommitTrans。
&H00020000:正在呼叫RollbackTrans。
State属性:显示对象的状态:
0:对象已经关闭。
1:对象已经开启。
让我们看一个於ASP程式码当中使用Attributes/State属性的例子。

譬如ASP程式码rs17.asp如下:

<%

Set conn1 = Server.CreateObject(“ADODB.Connection”)

conn1.Open “DBQ=”& Server.MapPath(“ntopsamp.mdb”) &”;Driver={Microsoft Access Driver (*.mdb)};DriverId=25;FIL=MS Access;”

Response.Write “<BR>conn1.Attributes: ” & conn1.Attributes

Response.Write “<BR>conn1.State: ” & conn1.Attributes

Set rs2 = Server.CreateObject(“ADODB.Recordset”)

rs2.Open “产品”,conn1,1,1

For Each fld In rs2.Fields

Response.Write “<BR>” & fld.Name & “=” & hex(fld.Attributes)

Next

%>

    以上的 ASP程式码rs17.asp,於用户端使用浏览器,浏览执行的结果,For Each fld In rs2.Fields取得所有字段的讯息。显示:

    字段类型为文字text字段、日期时间date 字段、整数int字段、备注memo字段,为可写入资料(&H00000004)、可接受Null的资料值(&H00000020)、可能读取到此字段为Null的资料值(&H00000040)。
    字段类型为日期时间date 字段、整数int字段,为固定长度的资料(&H00000010)。
    字段类型为备注memo字段,为长位元(long binary)字段(&H00000040)。