<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[Tomatop's Blog]]></title> 
<link>http://www.tomatop.cn/index.php</link> 
<description><![CDATA[懂得珍惜,懂得感恩..]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[Tomatop's Blog]]></copyright>
<item>
<link>http://www.tomatop.cn/read.php?19</link>
<title><![CDATA[ASP编程中20个非常有用的例子]]></title> 
<author>tomatop &lt;t@tomatop.cn&gt;</author>
<category><![CDATA[ASP相关]]></category>
<pubDate>Tue, 18 Jul 2006 05:20:33 +0000</pubDate> 
<guid>http://www.tomatop.cn/read.php?19</guid> 
<description>
<![CDATA[ 
	<div class="code">1.如何用Asp判断你的网站的虚拟物理路径 <br/>答：使用Mappath方法 <br/>&lt; p align=&quot;center&quot; &gt;&lt; font size=&quot;4&quot; face=&quot;Arial&quot; &gt;&lt; b &gt; <br/>The Physical path to this virtual website is: <br/>&lt; /b &gt;&lt; /font &gt; <br/>&lt; font color=&quot;#FF0000&quot; size=&quot;6&quot; face=&quot;Arial&quot; &gt; <br/>&lt; %= Server.MapPath(&quot;&#92;&quot;)% &gt; <br/>&lt; /font &gt;&lt; /p &gt; </div><br/><div class="code">2.我如何知道使用者所用的浏览器？ <br/>答：使用the Request object方法 <br/>strBrowser=Request.ServerVariables(&quot;HTTP_USER_AGENT&quot;) <br/>If Instr(strBrowser,&quot;MSIE&quot;) &lt; &gt; 0 Then <br/>　　Response.redirect(&quot;ForMSIEOnly.htm&quot;) <br/>Else <br/>　　Response.redirect(&quot;ForAll.htm&quot;) <br/>End If <br/>　 <br/><br/>3.如何计算每天的平均反复访问人数 <br/>答：解决方法 <br/>&lt; % startdate=DateDiff(&quot;d&quot;,Now,&quot;01/01/1990&quot;) <br/>if strdate&lt; 0 then startdate=startdate*-1 <br/>avgvpd=Int((usercnt)/startdate) % &gt; <br/>显示结果 <br/>&lt; % response.write(avgvpd) % &gt; <br/>that is it.this page have been viewed since November 10,1998 <br/><br/>4.如何显示随机图象 <br/>&lt; % dim p,ppic,dpic <br/>ppic=12 <br/>randomize <br/>p=Int((ppic*rnd)+1) <br/>dpic=&quot;graphix/randompics/&quot;&amp;p&amp;&quot;.gif&quot; <br/>% &gt; <br/>显示 <br/>&lt; img src=&quot;&lt; %=dpic% &gt;&quot; &gt; <br/><br/>5.如何回到先前的页面 <br/>答：&lt; a href=&quot;&lt; %=request.serverVariables(&quot;Http_REFERER&quot;)% &gt;&quot; &gt;preivous page&lt; /a &gt; <br/>或用图片如：&lt; img src=&quot;arrowback.gif&quot; alt=&quot;&lt; %=request.serverVariables(&quot;HTTP_REFERER&quot;)% &gt;&quot; &gt; <br/><br/>6.如何确定对方的IP地址 <br/>答：&lt; %=Request.serverVariables(&quot;REMOTE_ADDR)% &gt; <br/><br/>7.如何链结到一副图片上 <br/>答：&lt; % @Languages=vbs cript % &gt; <br/>&lt; % response.expires=0 <br/>strimagename=&quot;graphix/errors/erroriamge.gif&quot; <br/>response.redirect(strimagename) <br/>% &gt; <br/><br/>8.强迫输入密码对话框 <br/>答：把这句话放载页面的开头 <br/>&lt; % response.status=&quot;401 not Authorized&quot; <br/>response.end <br/>% &gt; <br/><br/>9.如何传递变量从一页到另一页 <br/>答：用 HIDDEN 类型来传递变量 <br/>&lt; % form method=&quot;post&quot; action=&quot;mynextpage.asp&quot; &gt; <br/>&lt; % for each item in request.form % &gt; <br/>&lt; input namee=&quot;&lt; %=item% &gt;&quot; type=&quot;HIDDEN&quot; <br/>value=&quot;&lt; %=server.HTMLEncode(Request.form(item)) % &gt;&quot; &gt; <br/>&lt; % next % &gt; <br/>&lt; /form &gt; <br/><br/>10.为何我在 asp 程序内使用 msgbox，程序出错说没有权限 <br/>答：由于 asp 是服务器运行的，如果可以在服务器显示一个对话框，那么你只好等有人按了确定之后，你的程序才能继续执行，而一般服务器不会有人守着，所以微软不得不禁止这个函数，并胡乱告诉你 (:) 呵呵) 没有权限。但是ASP和客户端脚本结合倒可以显示一个对话框，as follows: <br/>&lt; % yourVar=&quot;测试对话框&quot;% &gt; <br/>&lt; % s cript language=javas cript &gt; <br/>alert(&quot;&lt; %=yourvar% &gt;&quot;) <br/>&lt; /s cript &gt; <br/><br/>11.有没有办法保护自己的源代码，不给人看到 <br/>答：可以去下载一个微软的Windows s cript Encoder，它可以对asp的脚本和客户端javas cript/vbs cript脚本进行加密。。。不过客户端加密后，只有ie5才能执行，服务器端脚本加密后，只有服务器上安装有s cript engine 5(装一个ie5就有了)才能执行。 <br/><br/>12.怎样才能将 query string 从一个 asp 文件传送到另一个？ <br/>答：前者文件加入下句： Response.Redirect(&quot;second.asp?&quot; &amp; Request.ServerVariables(&quot;QUERY_STRING&quot;)) <br/><br/>13.global.asa文件总是不起作用? <br/>答：只有web目录设置为web application, global.asa才有效，并且一个web application的根目录下 global.asa才有效。IIS4可以使用Internet Service Manager设置application setting 怎样才能使得htm文件如同asp文件一样可以执行脚本代码？ <br/><br/>14.怎样才能使得htm文件如同asp文件一样可以执行脚本代码？ <br/>答：Internet Sevices Manager - &gt; 选择default web site - &gt;右鼠键- &gt;菜单属性-〉主目录- &gt; 应用程序设置(Application Setting)- &gt; 点击按钮 &quot;配置&quot;- &gt; app mapping - &gt;点击按钮&quot;Add&quot; - &gt; executable browse选择 &#92;WINNT&#92;SYSTEM32&#92;INETSRV&#92;ASP.DLL EXTENSION 输入 htm method exclusions 输入PUT.DELETE 全部确定即可。但是值得注意的是这样对htm也要由asp.dll处理，效率将降低。 <br/><br/>15.如何注册组件 <br/>答：有两种方法。 <br/>第一种方法：手工注册 DLL 这种方法从IIs 3.0一直使用到IIs 4.0和其它的Web Server。它需要你在命令行方式下来执行，进入到包含有DLL的目录，并输入：regsvr32 component_name.dll 例如 c:&#92;temp&#92;regsvr32 AspEmail.dll 它会把dll的特定信息注册入服务器中的注册表中。然后这个组件就可以在服务器上使用了，但是这个方法有一个缺陷。当使用这种方法注册完毕组件后，该组件必须要相应的设置NT的匿名帐号有权限执行这个dll。特别是一些组件需要读取注册表，所以，这个注册组件的方法仅仅是使用在服务器上没有MTS的情况下，要取消注册这个dll，使用：regsvr32 /u aspobject.dll example c:&#92;temp&#92;regsvr32 /u aneiodbc.dll <br/><br/>第二种方法：使用MTS(Microsoft Transaction Server) MTS是IIS 4新增特色，但是它提供了巨大的改进。MTS允许你指定只有有特权的用户才能够访问组件，大大提高了网站服务器上的安全性设置。在MTS上注册组件的步骤如下： <br/>1) 打开IIS管理控制台。 <br/>2) 展开transaction server，右键单击&quot;pkgs installed&quot;然后选择&quot;new package&quot;。 <br/>3) 单击&quot;create an empty package&quot;。 <br/>4) 给该包命名。 <br/>5) 指定administrator帐号或则使用&quot;interactive&quot;(如果服务器经常是使用administrator 登陆的话)。 <br/>6) 现在使用右键单击你刚建立的那个包下面展开后的&quot;components&quot;。选择 &quot;new then component&quot;。 <br/>7) 选择 &quot;install new component&quot; 。 <br/>8) 找到你的.dll文件然后选择next到完成。 <br/>要删除这个对象，只要选择它的图标，然后选择delete。 <br/>附注：特别要注意第二种方法，它是用来调试自己编写组件的最好方法，而不必每次都需要重新启动机器了。 <br/><br/>16. ASP与Access数据库连接： <br/><br/>&lt;%@ language=VBs cript%&gt; <br/>&lt;% <br/>dim conn,mdbfile <br/>mdbfile=server.mappath(&quot;数据库名称.mdb&quot;) <br/>set conn=server.createobject(&quot;adodb.connection&quot;) <br/>conn.open &quot;driver=&#123;microsoft access driver (*.mdb)&#125;;uid=admin;pwd=数据库密码;dbq=&quot;&amp;mdbfile <br/><br/>%&gt; <br/><br/>17. ASP与SQL数据库连接： <br/><br/>&lt;%@ language=VBs cript%&gt; <br/>&lt;% <br/>dim conn <br/>set conn=server.createobject(&quot;ADODB.connection&quot;) <br/>con.open &quot;PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码;DATABASE=数据库名称 <br/>%&gt; <br/><br/>建立记录集对象： <br/><br/>set rs=server.createobject(&quot;adodb.recordset&quot;) <br/>rs.open SQL语句,conn,3,2 <br/><br/>18. SQL常用命令使用方法： <br/><br/>(1) 数据记录筛选： <br/><br/>sql=&quot;select * from 数据表 where 字段名=字段值 order by 字段名 &#91;desc&#93;&quot; <br/><br/>sql=&quot;select * from 数据表 where 字段名 like %字段值% order by 字段名 &#91;desc&#93;&quot; <br/><br/>sql=&quot;select top 10 * from 数据表 where 字段名 order by 字段名 &#91;desc&#93;&quot; <br/><br/>sql=&quot;select * from 数据表 where 字段名 in (值1,值2,值3)&quot; <br/><br/>sql=&quot;select * from 数据表 where 字段名 between 值1 and 值2&quot; <br/><br/>(2) 更新数据记录： <br/><br/>sql=&quot;update 数据表 set 字段名=字段值 where 条件表达式&quot; <br/><br/>sql=&quot;update 数据表 set 字段1=值1,字段2=值2 …… 字段n=值n where 条件表达式&quot; <br/><br/>(3) 删除数据记录： <br/><br/>sql=&quot;delete from 数据表 where 条件表达式&quot; <br/><br/>sql=&quot;delete from 数据表&quot; (将数据表所有记录删除) <br/><br/>(4) 添加数据记录： <br/><br/>sql=&quot;insert into 数据表 (字段1,字段2,字段3 …) valuess (值1,值2,值3 …)&quot; <br/><br/>sql=&quot;insert into 目标数据表 select * from 源数据表&quot; (把源数据表的记录添加到目标数据表) <br/><br/>(5) 数据记录统计函数： <br/><br/>AVG(字段名) 得出一个表格栏平均值 <br/>COUNT(*&#124;字段名) 对数据行数的统计或对某一栏有值的数据行数统计 <br/>MAX(字段名) 取得一个表格栏最大的值 <br/>MIN(字段名) 取得一个表格栏最小的值 <br/>SUM(字段名) 把数据栏的值相加 <br/><br/>引用以上函数的方法： <br/><br/>sql=&quot;select sum(字段名) as 别名 from 数据表 where 条件表达式&quot; <br/>set rs=conn.excute(sql) <br/><br/>用 rs(&quot;别名&quot;) 获取统的计值，其它函数运用同上。 <br/><br/>(5) 数据表的建立和删除： <br/><br/>CREATE TABLE 数据表名称(字段1 类型1(长度),字段2 类型2(长度) …… ) <br/><br/>例：CREATE TABLE tab01(name varchar(50),datetime default now()) <br/><br/>DROP TABLE 数据表名称 (永久性删除一个数据表) <br/><br/>19. 记录集对象的方法： <br/><br/>rs.movenext 将记录指针从当前的位置向下移一行 <br/>rs.moveprevious 将记录指针从当前的位置向上移一行 <br/>rs.movefirst 将记录指针移到数据表第一行 <br/>rs.movelast 将记录指针移到数据表最后一行 <br/>rs.absoluteposition=N 将记录指针移到数据表第N行 <br/>rs.absolutepage=N 将记录指针移到第N页的第一行 <br/>rs.pagesize=N 设置每页为N条记录 <br/>rs.pagecount 根据 pagesize 的设置返回总页数 <br/>rs.recordcount 返回记录总数 <br/>rs.bof 返回记录指针是否超出数据表首端，true表示是，false为否 <br/>rs.eof 返回记录指针是否超出数据表末端，true表示是，false为否 <br/>rs.delete 删除当前记录，但记录指针不会向下移动 <br/>rs.addnew 添加记录到数据表末端 <br/>rs.update 更新数据表记录 <br/><br/>－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－－ <br/><br/>20 Recordset对象方法 <br/><br/>Open方法 <br/><br/>recordset.Open Source,ActiveConnection,CursorType,LockType,Options <br/><br/>Source <br/>Recordset对象可以通过Source属性来连接Command对象。Source参数可以是一个Command对象名称、一段SQL命令、一个指定的数据表名称或是一个Stored Procedure。假如省略这个参数，系统则采用Recordset对象的Source属性。 <br/><br/>ActiveConnection <br/>Recordset对象可以通过ActiveConnection属性来连接Connection对象。这里的ActiveConnection可以是一个Connection对象或是一串包含数据库连接信息(ConnectionString)的字符串参数。 <br/><br/>CursorType <br/>Recordset对象Open方法的CursorType参数表示将以什么样的游标类型启动数据，包括adOpenForwardOnly、adOpenKeyset、adOpenDynamic及adOpenStatic，分述如下： <br/>-------------------------------------------------------------- <br/>常数 常数值 说明 <br/>------------------------------------------------------------- <br/>adOpenForwardOnly 0 缺省值，启动一个只能向前移动的游标(Forward Only)。 <br/>adOpenKeyset 1 启动一个Keyset类型的游标。 <br/>adOpenDynamic 2 启动一个Dynamic类型的游标。 <br/>adOpenStatic 3 启动一个Static类型的游标。 <br/>------------------------------------------------------------- <br/>以上几个游标类型将直接影响到Recordset对象所有的属性和方法，以下列表说明他们之间的区别。 <br/><br/>------------------------------------------------------------- <br/>Recordset属性 adOpenForwardOnly adOpenKeyset adOpenDynamic adOpenStatic <br/>------------------------------------------------------------- <br/>AbsolutePage 不支持 不支持 可读写 可读写 <br/>AbsolutePosition 不支持 不支持 可读写 可读写 <br/>ActiveConnection 可读写 可读写 可读写 可读写 <br/>BOF 只读 只读 只读 只读 <br/>Bookmark 不支持 不支持 可读写 可读写 <br/>CacheSize 可读写 可读写 可读写 可读写 <br/>CursorLocation 可读写 可读写 可读写 可读写 <br/>CursorType 可读写 可读写 可读写 可读写 <br/>EditMode 只读 只读 只读 只读 <br/>EOF 只读 只读 只读 只读 <br/>Filter 可读写 可读写 可读写 可读写 <br/>LockType 可读写 可读写 可读写 可读写 <br/>MarshalOptions 可读写 可读写 可读写 可读写 <br/>MaxRecords 可读写 可读写 可读写 可读写 <br/>PageCount 不支持 不支持 只读 只读 <br/>PageSize 可读写 可读写 可读写 可读写 <br/>RecordCount 不支持 不支持 只读 只读 <br/>Source 可读写 可读写 可读写 可读写 <br/>State 只读 只读 只读 只读 <br/>Status 只读 只读 只读 只读 <br/>AddNew 支持 支持 支持 支持 <br/>CancelBatch 支持 支持 支持 支持 <br/>CancelUpdate 支持 支持 支持 支持 <br/>Clone 不支持 不支持 <br/>Close 支持 支持 支持 支持 <br/>Delete 支持 支持 支持 支持 <br/>GetRows 支持 支持 支持 支持 <br/>Move 不支持 支持 支持 支持 <br/>MoveFirst 支持 支持 支持 支持 <br/>MoveLast 不支持 支持 支持 支持 <br/>MoveNext 支持 支持 支持 支持 <br/>MovePrevious 不支持 支持 支持 支持 <br/>NextRecordset 支持 支持 支持 支持 <br/>Open 支持 支持 支持 支持 <br/>Requery 支持 支持 支持 支持 <br/>Resync 不支持 不支持 支持 支持 <br/>Supports 支持 支持 支持 支持 <br/>Update 支持 支持 支持 支持 <br/>UpdateBatch 支持 支持 支持 支持 <br/>-------------------------------------------------------------- <br/>其中NextRecordset方法并不适用于Microsoft Access数据库。 <br/><br/>LockType <br/>Recordset对象Open方法的LockType参数表示要采用的Lock类型，如果忽略这个参数，那么系统会以Recordset对象的LockType属性为预设值。LockType参数包含adLockReadOnly、adLockPrssimistic、adLockOptimistic及adLockBatchOptimistic等，分述如下： <br/><br/>------------------------------------------------------------- <br/>常数 常数值 说明 <br/>-------------------------------------------------------------- <br/>adLockReadOnly 1 缺省值，Recordset对象以只读方式启动，无法运行AddNew、Update及Delete等方法 <br/>adLockPrssimistic 2 当数据源正在更新时，系统会暂时锁住其他用户的动作，以保持数据一致性。 <br/>adLockOptimistic 3 当数据源正在更新时，系统并不会锁住其他用户的动作，其他用户可以对数据进行增、删、改的操作。 <br/>adLockBatchOptimistic 4 当数据源正在更新时，其他用户必须将CursorLocation属性改为adUdeClientBatch才能对数据进行增、 <br/>删、改的操作。 </div>
]]>
</description>
</item>
</channel>
</rss>