2004年10月23日

<%
‘本例程序适合给 wenzhang.asp 或 wenzhang.asp?page=1 或 wenzhang.asp?str1=参数&page=1 类型的网址进行分页

on error resume next ‘防止用户随意修改造成错误
if request.querystring(“page”)=”" then page=1:else:page=cint(request.querystring(“page”)) ‘得到网址中page的页码如 a.asp?page=1

set link1=server.createobject(“ADODB.Connection”) ‘连接数据库
link1.open “Provider=Microsoft.Jet.OLEDB.4.0; Data Source=” & server.mappath(“数据库1.mdb”)
set rs=server.createobject(“adodb.recordset”)
rs.open “select * from 表1″,link1,1,1 ‘这几句定义记录集的游标及每页存储的记录条数和当前页设定,很重要
rs.pagesize=12
rs.AbsolutePage=page
if err.number<>0 then ‘防止了用户恶意修改网址,和数据库无记录的错误
response.write “出现异常错误”
response.end
end if
%>
<base target=’_blank’><!–使内容在新窗口弹出–>
<table border=1>
<%
for i=0 to rs.pagesize-1 ‘显示具体的数据内容了,i+(page*13-13)+1 这个解决分页后显示具体的编号
if rs.eof then exit for
response.write “<tr><Td>” & i+(page*13-13)+1 & “:<A href=’” & rs(“连接”) & “‘> & rs(“作者”) & “</a></td></tr>”
rs.movenext
next
%>
<tr><Td align=right>
<base target=’_top’><!–使分页连接不在新窗口弹出,以下是我要着重讲的完美分页程序的完整程序了,您可根据需要修改–>
<%
pagelen=split(request.ServerVariables(“Query_String”),”&”) ‘得到网址 ?号 后面的参数网址
if UBound(pagelen)<1 then ‘如果网址是 xxx.asp?page=1 或 xxx.asp 类型的则用标准的分页方法
if page>1 then response.write “<A href=’a.asp?page=1′>首页</a> <a href=’a.asp?page=” & page-1 & “‘>上页</a> “:else:response.write “首页 上页 “
if page<rs.pagecount then response.write “<a href=’a.asp?page=” & page+1 & “‘>下页</a> <a href=’a.asp?page=” & rs.pagecount & “‘>尾页</a> “:else:response.write “下页 尾页 “
for i=1 to rs.pagecount
if i=page then response.write i & ” “:else:response.write “<A href=’a.asp?page=” & i & “‘>” & i & “</a> “
next

else ‘如果网址是 xxx.asp?str1=参数&page=1 的类型则进行其他分页方法

if page>1 then response.write “<A href=’a.asp?” & pagelen(0) & “&page=1′>首页</a> <a href=’a.asp?” & pagelen(0) & “&page=” & page-1 & “‘>上页</a> “:else:response.write “首页 上页 “
if page<rs.pagecount then response.write “<a href=’a.asp?” & pagelen(0) & “&page=” & page+1 & “‘>下页</a> <a href=’a.asp?” & pagelen(0) & “&page=” & rs.pagecount & “‘>尾页</a> “:else:response.write “下页 尾页 “
for i=1 to rs.pagecount
if i=page then response.write i & ” “:else:response.write “<A href=’a.asp?” & pagelen(0) & “&page=” & i & “‘>” & i & “</a> “
next
end if ‘pagelen(0)等于 str1=参数
‘pagelen(1)等于 page=1
rs.close ‘释放资源
set rs=nothing
set link1=nothing
%>
</table></body></html>

ASP教程:ADO 存取数据库时如何分页显示

作者:书生

——————————————————————————–
  什么是 ADO 存取数据库时的分页显示?如果你使用过目前众多网站上的电子公告板程序的话,那你应该会知道电子公告板程序为了提高页面的读取速度,一般不会将所有的帖子全部在一页中罗列出来,而是将其分成多页显示,每页显示一定数目的帖子数,譬如 20 条。想不想了解如何实现分页显示?请看本文!

  《动态网站设计十八般武艺 –ASP 篇》一文从第一期至今已和朋友们一起度过了大半个年头,相信通过在这一段时间中的学习、实践到再学习、再实践,大家已经能够熟练运用 ASP 的内建对象、 ActiveX 组件去编写一些基本的 ASP 应用程序。从我收到的朋友们的来信中可以明显的感觉到,大家的 ASP 功力正不断地提升。最近很多朋友来信希望我写一些 ASP 在现实运用中的实例。因此,从本期开始我决定将《动态网站设计十八般武艺 –ASP 篇》的定位从介绍和学习 ASP 基础知识转向到 ASP 实际运行的探讨和深化。应朋友们的要求,在本期中我将给大家着重谈一谈“ADO 存取数据库时如何分页显示”的问题。
  什么是 ADO 存取数据库时的分页显示?如果你使用过目前众多网站上的电子公告板程序的话,那你应该会知道电子公告板程序为了提高页面的读取速度,一般不会将所有的帖子全部在一页中罗列出来,而是将其分成多页显示,每页显示一定数目的帖子数,譬如 20 条。这就是数据库查询的分页显示,如果你还不明白,去看看 yahoo 等搜索引擎的查询结果就会明白了。

  那么究竟如何才能做到将数据库的查询结果分页显示呢?其实方法有很多,但主要有两种:

  一、将数据库中所有符合查询条件的记录一次性的都读入 recordset 中,存放在内存中,然后通过 ADO Recordset 对象所提供的几个专门支持分页处理的属性: PageSize( 页大小 )、 PageCount( 页数目 ) 以及 AbsolutePage( 绝对页 ) 来管理分页处理。

  二、根据客户的指示,每次分别从符合查询条件的记录中将规定数目的记录数读取出来并显示。

  两者的主要差别在于前者是一次性将所有记录都读入内存然后再根据指示来依次做判断分析从而达到分页显示的效果,而后者是先根据指示做出判断并将规定数目的符合查询条件的记录读入内存,从而直接达到分页显示的功能。

  我们可以很明显的感觉到,当数据库中的记录数达到上万或更多时,第一种方法的执行效率将明显低于第二种方法,因为当每一个客户查询页面时都要将所有符合条件的记录存放在服务器内存中,然后在进行分页等处理,如果同时有超过 100 个的客户在线查询,那么 ASP 应用程序的执行效率将大受影响。但是,当服务器上数据库的记录数以及同时在线的人数并不是很多时,两者在执行效率上是相差无几的,此时一般就采用第一种方法,因为第一种方法的 ASP 程序编写相对第二种方法要简单明了得多。

  在这里作者就以我们常见的 ASP BBS 程序为例,来给大家分析一下如何在 BBS 程序里实现分页显示功能,由于我们一般使用的 BBS 程序的数据库记录数和同时访问的人数都不会太多,所以以下程序实例是使用的先前所介绍的第一种分页显示方法。

   进行 ADO 存取数据库时的分页显示,其实就是对 Recordset 的记录进行操作。所以我们首先必须了解 Reordset 对象的属性和方法:
   BOF 属性:目前指标指到 RecordSet 的第一笔。

   EOF 属性:目前指标指到 RecordSet 的最后一笔。

   Move 方法:移动指标到 RecordSet 中的某一条记录。

   AbsolutePage 属性:设定当前记录的位置是位于哪一页 AbsolutePosition 属性:目前指标在 RecordSet 中的位置。

   PageCount 属性:显示 Recordset 对象包括多少“页”的数据。

   PageSize 属性:显示 Recordset 对象每一页显示的记录数。

   RecordCount 属性:显示 Recordset 对象记录的总数。

   下面让我们来详细认识一下这些重要的属性和方法

   一、 BOF 与 EOF 属性

   通常我们在 ASP 程序中编写代码来检验 BOF 与 EOF 属性,从而得知目前指标所指向的 RecordSet 的位置,使用 BOF 与 EOF 属性,可以得知一个 Recordset 对象是否包含有记录或者得知移动记录行是否已经超出该 Recordset 对象的范围。

   如: < % if not rs.eof then … %>

   < % if not (rs.bof and rs.eof) %>

  若当前记录的位置是在一个 Recordset 对象第一行记录之前时, BOF 属性返回 true,反之则返回 false。

  若当前记录的位置是在一个 Recordset 对象最后一行记录之后时, EOF 属性返回 true,反之则返回 false。

  BOF 与 EOF 都为 False:表示指标位于 RecordSet 的当中。

  BOF 为 True:目前指标指到 RecordSet 的第一笔记录。 EOF 为 True:目前指标指到 RecordSet 的最后一笔记录。

  BOF 与 EOF 都为 True:在 RecordSet 里没有任何记录。

  二、 Move 方法

  您可以用 Move 方法移动指标到 RecordSet 中的某一笔记录,语法如下:

  rs.Move NumRecords,Start

  这里的“rs”为一个对象变量,表示一个想要移动当当前记录位置的 Recordset 对象;“NumRecords”是一个正负数运算式,设定当前记录位置的移动数目;“start”是一个可选的项目,用来指定记录起始的标签。

   所有的 Recordset 对象都支持 Move 方法,如果 NumRecords 参数大于零,当前记录位置向末尾的方向移动;如果其小于零,则当前记录位置向开头的方向移动;如果一个空的 Recordset 对象调用 Move 方法,将会产生一个错误。

   MoveFirst 方法:将当前记录位置移至第一笔记录。

   MoveLast 方法:将当前记录位置移至最后一笔记录。

   MoveNext 方法:将当前记录位置移至下一笔记录。 MovePrevious 方法:将当前记录位置移至上一笔记录。

   Move [n] 方法:移动指标到第 n 笔记录, n 由 0 算起。

  三、 AbsolutePage 属性

  AbsolutePage 属性设定当前记录的位置是位于哪一页的页数编号;使用 PageSize 属性将 Recordset 对象分割为逻辑上的页数,每一页的记录数为 PageSize( 除了最后一页可能会有少于 PageSize 的记录数 )。这里必须注意并不是所有的数据提供者都支持此项属性,因此使用时要小心。

  与 AbsolutePosition 属性相同, AbsolutePage 属性是以 1 为起始的,若当前记录为 Recordset 的第一行记录, AbsolutePage 为 1。可以设定 AbsolutePage 属性,以移动到一个指定页的第一行记录位置。

  四、 AbsolutePosition 属性

  若您需要确定目前指标在 RecordSet 中的位置,您可以用 AbsolutePosition 属性。

  AbsolutePosition 属性的数值为目前指标相对於第一笔的位置,由 1 算起,即第一笔的 AbsolutePosition 为 1。

  注意 , 在存取 RecordSet 时,无法保证 RecordSet 每次都以同样的顺序出现。

  若要启用 AbsolutePosition,必须先设定为使用用户端 cursor( 指针 ), asp 码如下:

  rs2.CursorLocation = 3

  五、 PageCount 属性

  使用 PageCount 属性,决定 Recordset 对象包括多少“页”的数据。这里的“页”是数据记录的集合,大小等于 PageSize 属性的设定,即使最后一页的记录数比 PageSize 的值少,最后一页也算是 PageCount 的一页。必须注意也并不是所有的数据提供者都支持此项属性。

  六、 PageSize 属性

  PageSize 属性是决定 ADO 存取数据库时如何分页显示的关键,使用它就可以决定多少记录组成一个逻辑上的“一页”。设定并建立一个页的大小,从而允许使用 AbsolutePage 属性移到其它逻辑页的第一条记录。 PageSize 属性能随时被设定。
  七、 RecordCount 属性

  这也是一个非常常用和重要的属性,我们常用 RecordCount 属性来找出一个 Record

用给ASP的,只是段简单的大意

qq = “SELECE方式略”

rs.Open qq,conn,1,1,1 ‘##详细的连接略去

dim desurl
dim lPageNo
rs.pagesize=15 ‘##每页显示数量
desurl = “本页地址.asp”
lTotal = rs.pagecount
lPageNo = 1
if lPageNo<1 then lPageNo=1
if request(“inputpage”)<>”" then lPageNo=cint(request(“inputpage”))
    rs.absolutepage=lPageNo
end if
    
if lTotal > 1 then
    response.write ” 当前显示: 第” & lPageNo & “/” & lTotal & “页&nbsp;&nbsp;&nbsp;&nbsp;”
end if

if lPageNo>1 then
    url=”<a href=”"” & desurl & “?forum=” & Request(“forum”) & “&inputpage=1″”>首页</a>”
    response.write url
    response.write ” “
    url=”<a href=”"” & desurl & “?forum=” & Request(“forum”) & “&inputpage=” & cstr(lpageno-1) & “”">上一页</a>”
    response.write url
    response.write ” “
else
    response.write “首页 上一页 “
end if
if lpageno<>ltotal then
    url=”<a href=”"” & desurl & “?forum=” & Request(“forum”) & “&inputpage=” & cstr(lpageno+1) & “”">下一页</font></a>”
    response.write url
    response.write “ ”
    url=”<a href=”"” & desurl & “?forum=” & Request(“forum”) & “&inputpage=” & cstr(ltotal) & “”">尾页</font></a>”
    response.write url
else
    response.write “下一页 尾页”
end if

‘##省略选出行的显示

rs.Close
set rs = nothing

2004年10月22日

<script language=”JavaScript”>

step=0

function flash_title()

{

step++

if (step==3) {step=1}

if (step==1) {document.title=’█ yoururl.com’}

if (step==2) {document.title=’■ yoururl.com’}

setTimeout(“flash_title()”,200);

}

flash_title()

setTimeout(’self.focus()’,10000);

setTimeout(’self.moveTo(0,0)’,10000);

setTimeout(’self.resizeTo(800,600)’,10000);

<!– BEGIN X-IT CODE

var exit=true;

function xit()

{

if (exit)

open(“http://www.blueidea.com”);

}

// END X-IT CODE –>

</script>

动态联接库(DLL)是加快应用程序关键部分的执行速度的重要方法,但有一点恐怕大部分人都不知道,那就是在ASP文件也能通过调用DLL来加快服务器的执行速度,下面我简单的介绍一下在ASP文件调用DLL的步骤。
  首先,必须得有DLL文件,本例是通过VB5.0创建ActiveX DLL文件,这个文件模拟了一个掷色子的过程。
在VB5.0的环境下,新建一个工程,并双击新建工程窗口中ActiveX DLL图标,VB将自动为项目添加一个类模块,并将该项目类型设置为ActiveX DLL。在属性窗口将类模块的名称属性改为clsDice。从工程菜单中,选择工程属性,将工程名称改为MyDLL。从文件菜单中,选择保存clsDice,将类模块保存为myDice.cls。添加以下代码:

Option Explicit

Private Max, Point As Integer

Public Property Get Result() As Integer

Result = Point

End Property

Public Property Get Maxpoint() As Integer

Maxpoint = Max

End Property

Public Property Let Maxpoint(num As Integer)

Max = num

End Property

Public Sub Throw()

Randomize

Point = Int(Rnd * Max) + 1

End Sub

Private Sub Class_Initialize()

Max = 6

End Sub

  这个类模块定义了clsDice对象的两个属性和一个方法,这些属性和方法模拟了掷色子的过程。其中Maxpoint属性表示色子的面数,加入Property Let语句将使客户能修改色子的面数;Result属性表示最后掷出色子的点数;Throw方法代表掷色子的动作;Private Sub Class_Initialize语句将色子的面数缺省的设置为6面。

  从文件菜单中,选择生成MYDLL.DLL并将它保存到适当的地方。至此,我们就创建了一个自己的DLL文件。

  第二步要做的就是要在ASP文件中引用类clsDice。

  ASP(活动服务器页面Active Server Pages)的所有代码都是在服务器上运行的,客户只能查看以HTML形式传回的结果。它使用“<%”和“%>”标记来标识脚本代码,并不传回客户端,在代码外部,使用HTML标记来标识内容。在下面Dice.asp的代码中使用了CreateObject函数创建了一个clsDice对象实例,该对象来自于上面创建的ActiveX.DLL–MYDLL.DLL文件,下面的例子使用了VBScript脚本语言。

‘装载 METADATA 标签中指定的类型库。 Path是mydll.dll在机器上存放的路径

<%

On Error Resume Next ‘当程序出现意外错误时能继续执行

If Request.Form(“T1″)=”" then

Session(“point”) = 6

Else

Session(“point”)=Request.Form(“T1″)

End If

‘用Session(“point”)来存放色子的面数

Set dice1=Server.Createobject(“MyDLL.clsDice”)

‘使用set语句创建dice1对象,其中MyDLL是上面创建dll文件时的工程名称(注意:不是文件的名称),clsDice为类模块的名称。至此我们就可以用Maxpoint,Result和Throw属性(方法)来对dice1对象进行操作。

If Request.ServerVariables(“Request_Method”)=”POST” then

dice1.Maxpoint = Session(“point”) ‘设定色子的面数

dice1.Throw ’掷色子

%>

当色子的面数为
>时

结果为:<% = dice1.Result %>点

‘返回结果

<%

Else

dice1.Maxpoint = Session(“point”)

%>

当色子的面数为
>时

<%

End If

%>

  以上代码在WINDOWS NT4.0+SP3+IIS4.0+IE5.0+VB5.0上编译运行通过,但还有不少的缺陷,但我的本意是向大家介绍如何在ASP中调用DLL,所以我没有去完善它。

2004年10月20日

* 本例程将会用到Application对象、数据库、JavaScript、以及文件操作。

首先,我们列一下本例程将涉及的内容:

1) 我们将创建一个用于显示“每日提示”的弹出式窗口;
2) 提示将在每天呈现不同的内容;
3) 提示内容保存于数据库中,接受由网上传来的索取指令;
4) 提示内容更新便利,也可以随时添加新的内容;
5) 提供一种手段以列出所有提示。

下面,我们将涉及细节问题。我们只讨论其中的某些内容,其它的信息将由实际产生的文档提供(什么意思?蜘蛛精也不太明白,待我们往后瞧瞧再说)。

我需要知道当前显示的是哪一条提示。为了传送当前提示的编号,我们要用到Application。同时,为了在更新提示时知道这些,我们要将已显示的提示编号存档,保存在磁盘中。这样做是为了防止服务器重启动、断电、(反革命份子蓄意破坏、非法组织黑红色网站等)事故中相关数据丢失。我们就用TIPSTORE.DAT作数据存档文件。它包含两行,一行是提示的编号,一行是数据。

因为这些值一直存放在Application中,当运行“每日提示”时,我们就可将它们从TIPSTORE.DAT中取出。作这项工作最佳的方式是利用GLOBAL.ASA,在Application_OnStart中。GLOBAL.ASA文件可以取出这些值。(知道下面这句话怎么译的人请举手!)This is done, courtesy of the FileSystemObject and its support through the TextStreamObject methods:(好,手放下!既然你们都知道了,那我也就不解释了)

PhyPth = Server.MapPath(“/tipstore.dat”
set FilSys = CreateObject(“Scripting.FileSystemObject”
set TipFil = FilSys.OpenTextFile(PhyPth, 1)
Application(“CurTip” = TipFil.ReadLine
Application(“SymDt” = CDate(TipFil.ReadLine)
TipFil.Close
set TipFil = nothing
set FilSys = nothing

我们选择Server.MapPath指明文件的物理位址。这可使这段用于处理DAT文件的代码无须经过修改即可用于多个站点。FilSys创建为FileSystemObject,TipFil创建为TextStreamObject。我们接下来就可从这个文件里读数据,完成后再关闭它。

接下来,我们来看看这个更新提示的页面。这也是我们向用户提供提示选择权的页面。我也许会建议你把它放到你的主页上,而其实它可以放到任何地方。让我们来看一看这个名为HOME.ASP的文件的内容:

<%

‘Tip of the day processing
if Application(“SymDt” < Date then
Application.Lock
CurTip = Application(“CurTip” + 1
SymDt = date
Application(“CurTip” = CurTip
Application(“SymDt” = SymDt
Application.Unlock

PhyPth = Server.MapPath(“/tipstore.dat”
set FilSys = CreateObject(“Scripting.FileSystemObject”
set TipFil = FilSys.CreateTextFile(PhyPth, true)
TipFil.WriteLine(CurTip)
TipFil.WriteLine(CStr(SymDt))
TipFil.Close
set TipFil = nothing
set FilSys = nothing
end if

%> …
直到最后,我们检查当前的提示是否比上一个提示更新。如果第一个用户访问这个导致新数据的页面,我们就很容易来处理这种变化。(明白乎?反正蜘蛛精是搞蒙了。我发觉翻译技术资料最头痛的并不是技术内容,而是如何去领会作者的意思。鄙人生性愚钝,才疏学浅,直觉亦不甚敏锐,只有把这些内容留给网友了。原文请见英文版)。锁住Application,我们就不会取到重复的变化。选择下一个提示的编号,把当前的编号存入数据中以备明天使用。由于上述的诸多原因,将处理的结果存入文档是必要的。(除非你是玩MUD,或与网络情人进行生死恋。可以“24 hours a day, 7 days a week”地开着机器)

为了产生弹出式浏览器窗口,我们得借助JavaScript来完成。下面的函数可以完成这个功能。

function displayPopup(url, height, width) {

properties = “toolbar=0,location=0,scrollbars=1,height=” + = height;
properties = properties + “,width=” + width;
properties = properties + “,left=0,top=0″;
popupHandle = open(url, “tipwindow”, properties);

}
就像你看到的那样,我们可以在这个弹出窗口中显示任何一个网址。我们也可控制窗口的高度和宽度。对于不同的浏览器,代码产生的结果是不一样的,所以需要在IE和Netscape中作测试。我已预设了一些参数以调整我们要生成的窗口。

Javascript要以为我们创建这个窗口。
URL:

<a href=”javascriptisplayPopup(‘popup.asp’,300,300)”>

‘javascript:’协议告诉浏览器这段代码由JavaScript引擎解释,而与网络服务器无关。这样我们可以让浏览器处理函数时将POPUP.ASP作为地址。窗口大小为300×300象素。

也许该让POPUP.ASP粉墨登场了。

<%

TipNbr = Application(“CurTip”

set rstTip = CreateObject(“ADODB.Recordset”
rstTip.Open “SELECT * FROM Tip WHERE Tip=” & TipNbr, _
“DSN=TipData”
%>
我们创建rstTip作为Recordset来访问数据库,这个数据库注册为系统DSN(System DSN)(注册方法就不多说了吧,在控制面板中完成)。 DSN的名称为’TipData’。在记录中,我们关注存于Application中的提示编号。

我们要从记录中显示相关信息。

… <% = rstTip(“TipTitle” %> …
通过这种方法,我们把域’TipTitle’从当前的记录中记出,并将其返回至浏览器。我们完成显示后,就产闭它,释放对象。

… <%
rstTip.Close
set rstTip = nothing
%> …
你会发现另有两个ASP文件:RESETTIPS.ASP使提示编号回复到列表的开始;TIPLIST.ASP按指定的格式显示所有的提示。

使用asp尽量减少服务器端的工作量,这样就应该多使用javascript,把所有提交字段使用javascript或vbscript检测后提交给服务器,这样服务器就不必再作检测,而在提交时可能会有人修改script从本地提交,这样存在安全提交的问题,所以应该要求从服务器断路径提交,其他地址提交提交无无效:
<%
server_v1=Cstr(Request.ServerVariables(“HTTP_REFERER”))
server_v2=Cstr(Request.ServerVariables(“SERVER_NAME”))
if mid(server_v1,8,len(server_v2))<>server_v2 then
response.write “<br><br><center><table border=1 cellpadding=20 bordercolor=black bgcolor=#EEEEEE width=450>”
response.write “<tr><td style=’font:9pt Verdana’>”
response.write “你提交的路径有误,禁止从站点外部提交数据请不要乱该参数!”
response.write “</td></tr></table></center>”
response.end
end if
%>

n个月前写的……

无论是asp或php,都可以才用以下的方法和html结合。

    (看来我得写篇文章。。。呵呵。。)

    嗯,原理就是js引用外部文件。当然还可以用iframe标记,不过
本文只讨论js外连文件。

    所需标记及属性:

    <script src=’filename’></script>

因为是js,所以输出的文件内容必须符合javascript语法。很多
朋友就是在这方面出了错误,导致页面不正常

    举个例子,我现在想在html内嵌一个新闻滚动更新,源码距离如下:

–test.html–

<html>
<head><title>测试页面</title></head>

<body>

<p>以下是新闻内容</p>

<script src=”news.asp”>

</body>
</html>

–news.asp–
<!– #include file=”data.asp” –> // 数据库连接部分省去代码
<%

dim rs,sql,n,str

    set rs=server.createobject(“adodb.recordset”)

    sql=”select * from news order by date desc “

    rs.open sql,myconn,1 //myconn在data.asp中创建的数据库连接对象

    rs.movefirst
    
    while (not rs.eof) and (n<30)    //列出30条

    str=”<a href=’view.asp?id=”&rs(“id”)&”‘>”&rs(“title”)&”</a>”

%>
    document.write(“<%=str%>”);//语句输出每行字符串(也可以一次输出)
<%    

    n=n+1
    wend    
%>

---------------

代码大致如此,加上最近我用的是php 的perl和delphi 的object pascal,肯定对vbs

<!–#include virtual=”/adovbs.inc”–>
<%set conn=server.createobject(“adodb.recordset”)
db=server.mappath(“home.mdb”)
sql=”select top 3 * from pic order by id DESC”
conn.open sql,”driver={Microsoft Access Driver (*.mdb)};dbq=”&db,adopenstatic
response.contenttype = “application/x-javascript”
response.write “document.write(“”<table width=100% border=0><tr><td><a href=‘pic.htm’>最近加入3个桌面主题</a></td><td><td><a href=’”&conn(4)&”‘ target=’_blank’>”&conn(0)&”</a></td>”");”&chr(13)
conn.movenext
response.write “document.write(“”<td><a href=’”&conn(4)&”‘ target=’_blank’>”&conn(0)&”</a></td>”");”&chr(13)
conn.movenext
response.write “document.write(“”<td><a href=’”&conn(4)&”‘ target=’_blank’>”&conn(0)&”</a></td></tr></table>”");”&chr(13)
conn.close%>

听一个朋友说新东方的教育水平不错,他学的是java,说现在这方面比较看好,我也报了个班。

今天是第一次上课,路挺远的,快到的时候心情挺激动的,就提前一站下了车。

进了教室看到教室不错的,每人人手一台机器,老师讲的也很好。

我心里安静了,总算找了点事情做,这样心理会塌实一些。

还有,今天收到了一个面试的通知,准备明天试试。管他多少钱呢,先干着再说吧。

2004年10月19日

我来北京转眼都2个多月了,还是没找到工作,我也不知道是为什么,就是不想动。

和我一起毕业的同学都忙的不亦乐乎找工作,可是我却一点也不着急。

前几天刚刚安装了ADSL,还买了一个路由器,我就这样堕落了几天,天天cs。

太堕落了,我要结束这段生活了。