当前位置:文档之家› ASP分页代码(大型数据库)的

ASP分页代码(大型数据库)的

'****************************************************************** '** 本程序名:"无限流"分页程序

'** 作者:Arbiter(AAsx)

'** 版本:Million Level

'**

'** QQ:22222xx

'** Email:Arbiter@https://www.doczj.com/doc/882269768.html,

'** https://www.doczj.com/doc/882269768.html,/

'****************************************************************** '**

'** 【作者的话】

'**

'** 分页程序无疑是许多网络程序功能中一个比较麻烦的东西,事实上现在'** 为止绝大部分人还是在使用传统的分页方法(Rs.PageSize=xx),而了解'** 数据库操作的人都知道,这种传统方式有个弊端:第一次打开页面时,'** 它会预读所有的记录集,这当在数据大的时候,这将是致命的,而且接'** 下来的翻页速度也会非常慢,很占用资源。对于十万数量级以上的数据'** 库这种传统分页方式已经显得非常无力,更别说百万级了(根本没法操'** 作)。基于这种原因,促使我做了本程序。

'**

'** 【程序功能】

'**

'** 针对大型的数据库进行分页操作,理想的可操作的数据记录量在200万'** 以内(Max Level版将无数量限制,且无论数据库多大,翻页速度都是

'** 不变),这是Million Level版分页程序在赛扬1G、内存512、win2k环'** 境下的测试数据:

'**

'** SQLserver 2k 10万条记录每页显示20条:

'** 平均翻页速度:45ms

'** SQLserver 2k 100万条记录每页显示20条:

'** 平均翻页速度:350ms

'**

'**

'** 【分页原理】

'**

'** 本程序不再使用Rs.PageSize的方式分页,连接数据库的游标类型

'** 也不是使用conn,1,x,而是conn,0,1,这应是最快的游标类型了,不要'** 以为这样会使程序变得复杂,相反,程序非常简单,如果你看不明白,'** 应该是我的编程风格你不习惯,而非程序复杂。

'** "无限流"分页的中心是:每页只读出需要显示的记录,不再象传统

'** 分页程序预读全部的数据,这正在本程序最大的优点--占用资源少,同'** 理速度也得到非常大的提升,特别在数据量越大的时候,它的速度优势'** 越明显(100万记录才350ms左右)。

'** 当程序执行后,使用CurcorBegin和CurcorEnd记录显示的第一条记

'** 录和最后一条记录的ID值,作为下一次翻页的标记,然后利用Top xx取

'** 出需要的数据显示,同时又再对ID值进行记录。

'**

'** 【结言】

'**

'** 本程序为共享版,提供给各程序爱好者研究使用,若要转载、散播、修

'** 改或作其他用途,请尊重作者的辛劳,注明出处。

'** 如果本程序中有错漏、非最优化等缺点,请到https://www.doczj.com/doc/882269768.html,的Web开发/

'** ASP栏目中发表讨论,为了中国软件事业的发展,请不要固步自封:)

'**

'********************************************************************

Option Explicit

'Response.Flush

Dim BeginTime,EndTime

BeginTime=Timer

Dim conn,SQLstr,Rs,DefRecordNum,CursorBegin,CursorEnd,CurPageNum,hav DefRecordNum=20

'--------------获取相关参数----------

If Request("CursorBegin")="" Then CursorBegin=0 Else CursorBegin=Request("CursorBegin")

If Request("CursorEnd")="" Then CursorEnd=0 Else CursorEnd=Request("CursorEnd") If Request("CurPageNum")<>"" Then

CurPageNum=CLng(Request("CurPageNum"))

If CurPageNum<=0 Then CurPageNum=1

Else

CurPageNum=1

End If

hav=Request("hav")

If hav="" Then hav="next"

'----------------End-----------------

'------------显示翻页内容函数--------

Function TurnPageFS(DispRecordNum)

Dim n

While Not(Rs.Eof) And n

n=n 1

Response.Write ""&_

""&Rs(0)&""&_

""&Rs(1)&""&_

""&Rs(2)&""&_

""&Rs(3)&""&_

""&Rs(4)&""&_

""&Rs(5)&""&_

""

If n=1 Then CursorBegin=Rs(0)

If n=DefRecordNum Or Rs.Eof Then CursorEnd=Rs(0)

Rs.MoveNext

Wend

End Function

'-------------连接数据库-------------

Set conn=Server.CreateObject("Adodb.Connection")

'SQLstr="Provider=Microsoft.Jet.OLEDB.4.0;Data

Source="&Server.Mappath("mldata.mdb")

SQLstr="Driver={SQL

Server};server=arbiter;uid=arbiter;pwd=123456;database=mldata"

conn.Open SQLstr

'---------统计总记录数/总页数---------

'-PS:推荐使用count(ID),ID为自动编号且索引,否则速度有可能大打折扣

'-PS:此统计是本程序中最耗资源的一部分,如果取消这段程序,速度会快上10倍左右Dim TotalRecords,TotalPages

SQLstr="Select count(ID) As RecordSum From ABC"

Set Rs=conn.Execute(SQLstr,0,1)

TotalRecords=Rs("RecordSum")

TotalPages=Abs(Int(TotalRecords/DefRecordNum*(-1)))

Rs.Close

Set Rs=Nothing

'--------根据hav选择相应的SQL字串-----

Select Case(hav)

Case "back"

CursorEnd=CursorBegin

SQLstr="Select Top "&DefRecordNum&"_

ID,Title,FileName,K,ImgSize,NameSon _

From ABC Where ID<"&CursorBegin&_

" And ID In (Select Top "&DefRecordNum_

&" ID From ABC Where ID<"&CursorBegin_

&" Order by ID DESC) Order by ID"

Case "next"

SQLstr="Select Top "&DefRecordNum_

&" ID,Title,FileName,K,ImgSize,NameSon From ABC Where ID>"&CursorEnd&_

" Order by ID"

End Select

Set Rs=conn.Execute(SQLstr,0,1)

%>

"无限流"分页程序作者:Arbiter

<%Response.Write CurPageNum&"/"&TotalPages&"页总记录数:"&TotalRecords%>首页 上一页 下一页

<%

TurnPageFS(DefRecordNum)

Rs.Close

Set Rs=Nothing

conn.Close

Set conn=Nothing

%>

IDTitleFileName大小尺寸类别

<%Response.Write CurPageNum&"/"&TotalPages&"页总记录数:"&TotalRecords%>首页 上一页 下一页

<%

EndTime=Timer

Response.Write "
程序执行时间:"&(EndTime-BeginTime)*1000&"毫秒"

Response.Write " 第一条记录的ID值(CursorBegin)="&CursorBegin&" "

Response.Write "最后一条记录的ID值(CursorEnd)="&CursorEnd&"

"

%>

Cnbruce的代码:

分页样例:[首页] [上页] [下页] [尾页] [页次:4/5页] [共86篇 20篇/页] 转到:_ 页以下为公用代码,必须具备。

<%filepath=request.servervariables("path_info")%>

<%page=1 '设置变量初始值PAGE=1

page=request.querystring("page") 'page值为接受值

rs.PageSize = 20 '每页显示记录数

if Not IsEmpty(trim(Request("Page"))) then '如果PAGE已经初始化...

Page = CInt(Request("Page")) '接收PAGE并化为数字型赋给PAGE变量

if Page > rs.PageCount then '如果接收的页数大于总页数

rs.AbsolutePage = rs.PageCount '设置当前显示页等于最后页

elseif Page <= 0 then '如果page小于等于0

Page = 1 '设置PAGE等于第一页

else

rs.AbsolutePage = Page '如果大于零,显示当前页等于接收的页数

end if

End if

Page = rs.AbsolutePage%>

第一种分页

<%if rs.pagecount<>1 and rs.pagecount<>0 then%>'首先判断页总数不为1和0 <%if page>1 then%>

<%if page

[首页]

[上一页]

[下一页]

[尾页]

<%else%>

[首页]

[上一页]

[下一页] [尾页]

<% end if %>

<%else%>

[首页] [上一页]

[下一页]

[尾页]

<%end if %>

<%else%>

[首页] [上一页] [下一页] [尾页]

<%end if%> https://www.doczj.com/doc/882269768.html,

第二种分页

<%if rs.pagecount<>1 and rs.pagecount<>0 then%>

<%if page>1 then%>

[首页]

[上一页]

<%if page

[下一页]

[尾页]

<%else%>

[下一页] [尾页]

<% end if %>

<%else%>

[首页] [上一页]

[下一页]

[尾页]

<%end if %>

<%else%>

[首页] [上一页] [下一页] [尾页]

<%end if%>

第三种

<%if rs.pagecount<>1 and rs.pagecount<>0 then%>

<%if page

<%if page=1 then %>

[首页] [上一页]

<%else%>

[首页]

[上一页]

<% end if %>

[下一页]

[尾页]

<%else%>

[首页]

[上一页]

[下一页] [尾页]

<%end if %>

<%else%>

[首页] [上一页] [下一页] [尾页]

<%end if%>

在微软的ASP编程体系中,ADO对象的建立,使得从网页访问数据库成为一件易事,特别是ADO的Recordset对象使得控制数据的输出显示更为方便、自由。而在Visual InterDev6.0(以下简称VI6.0)中,由于Script Object Model(以下简称SOM)、Design-Time Control(以下简称DTC)以及Data Environment Object Model(以下简称DEOM)等对象模型的引入,使网页对数据库的访问设计显得更为方便。

因为主题方面的原因,关于数据库的连接,下文只给出代码和简要注释,而把重点放在如何利用Recordset对象(或控件)实现数据记录的分页显示方面。根据我的理解,分页显示的关键就在于对ADO的Recordset对象或DTC(设计时控件)的Recordset控件的属性和方法的熟练把握上。

这七种分页显示的武器概括起来说分四类:

第一、二种我暂取名叫“纯ASP法”,这也是国内的ASP网站上用得最多的方法,它们的区别仅在实现技巧的不同。这两种方法的实现最易理解,用到的对象概念也最少,对开发环境的要求也最低(只要记事本就行)。可以说,这两种方法的实质还是CGI的编程思想,只是在程序中引入了ADO对象而已。

第四、五种暂取名叫“SOM的DHTML法”。这两种方法要求在VI6.0的环境下,利用微软提出的脚本对象模型(Script Object Model)和DHTML中Table对象的与数据库绑定的新特性(许多书和文章只介绍了DHTML的CSS特性在样式设计中的运用而忽略介绍其数据绑定特性),实现在客户端控制翻页。但它要求用户的浏览器必须是支持DHTML,如:Microsoft Internet Explorer 4.0及以上的版本。

第六种暂取名叫“SOM服务器端法”。要求在VI6.0的环境下开发,它利用微软提出的脚本对象模型(Script Object Model)中的几个DTC控件:Recordset、PageObject、Grid 等在服务器端(客户端)实现翻页控制。这是一种激动人心的、全新的编程方法,它把网页看成对象(这种对象模型和传统的DOM----document object model是有区别的:DOM只能控制客户端,而SOM可控制服务器端和客户端),它真正实现了网页的面向对象编程。但遗憾的是,也许是我个人能力有限,这种技术我个人认为还不是很成熟,比如,与浏览器的结合还不是很好,这将在后文详细说明。

第七种暂取名叫“DEOM法”。它也是利用了VI6.0中建立的数据环境对象模型(Data Environment Object Model)建立Recordset对象。这也是在网页编程上比较少见的新方法,与SOM模型相比,自有它的优点,这将在后文详述。

在后面所举的所有例子源代码,都可以直接拷贝使用,你甚至可以不懂其原理,只要把其中的粗斜体字部分换成相应自己的数据库名或字段名就可以了。

在开始详细介绍各种分页方法前,让我们先创建一个数据库:用Office97中的access 自创一个Employee.mdb,其中建一个表emp,只设三个字段:emp ID,last name和first name。为什么这么简单,是因为我们关心的是怎样处理recordset的结果。

第一种:参数直接代入法

这种方法是用手工建立Recordset对象,利用其pagesize(每页指定显示记录数),pagecount(总页码数)和absolutepage(当前页码数)属性来控制分页的输出。分页采用<href>直接带页码参数的方法来控制翻页。网页的名字为emp1.asp。源代码如下:

<%//建立与employee.mdb数据库的连接。

Set conn = Server.CreateObject("ADODB.Connection")

conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq=employee.mdb"

//建立emp表的Recordset对象实例rs。

Set rs = Server.CreateObject("ADODB.Recordset")

rs.Open "emp", conn, 3

PageSize = 10 //pagesize属性指定了每页要显示的记录条数

Page = CLng(Request("Page")) ’string型转化为long型

If Page < 1 Then Page = 1

If Page > rs.PageCount Then Page = rs.PageCount

If Page <> 1 Then

Response.Write "<A HREF=emp1.asp?Page=1>第一页</A>?"

Response.Write "<A HREF=emp1.asp?Page=" & (Page-1) & ">上一页</A>?"

End If

If Page <> rs.PageCount Then

Response.Write "<A HREF=emp1.asp?Page=" & (Page+1) & ">下一页</A>?"

Response.Write "<A HREF=emp1.asp?Page="&rs.PageCount & ">最后一页</A>?"

End If

Response.write"页码:" & Page & "/" & rs.PageCount & "</font>"

//每一页的显示

//显示表头

Response.Write "<CENTER><TABLE BORDER=1>"

Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Name & "</TD>" Response.WRITE "<TD>" & rs.Fields("last name").Name & "</TD>"

Response.WRITE "<TD>" & rs.Fields("first name").Name & "</TD></TR>"

//循环显示每条记录

rs.AbsolutePage = Page //把页码赋给absolutepage属性从而知当前页的首条记录号

For iPage = 1 To rs.PageSize //

Response.WRITE "<TR><TD>" & rs.Fields("emp ID").Value & "</TD>" Response.WRITE "<TD>" & rs.Fields("first name").Value & "</TD>" Response.WRITE "<TD>" & rs.Fields("last name").Value & "</TD></TR>"

rs.MoveNext

If rs.EOF Then Exit For

Next

Response.Write "</TABLE></CENTER>"%>

第二种:表单传送参数法

这种方法在创建Recordset对象时与第一种相同,只是在翻页控制时,采用<input>

和case语句配合来实现翻页。网页的名字为:emp2.asp。此方法在编程逻辑上有个缺点:就是在按过“上页”或“下页”钮后,再在浏览器上按刷新按钮时,会自动翻页。源代码如下:

if Pagenum = "" Then Pagenum = 1 //从第一页开始显示

//建立数据库连接和Recordset对象实例rs。

与第一种方法相同,此处略过。

RS.Pagesize = 10 ’ 设置一页中显示的记录条数为10条

// 确定翻页的动作

Select Case Request("NAV")

Case ""

session("Pagenum") = 1

case "First" ’ First Record

session("Pagenum") = 1

case "Prev" ’ Previous Record

if session("Pagenum") > 1 then

session("Pagenum") = session("Pagenum") - 1

End If

case "Next" ’ Next Record

if session("Pagenum")< RS.PageCount then

session("Pagenum") = session("Pagenum") + 1

End if

case "Last" ’ Last Record

session("Pagenum") = RS.PageCount

End Select

RS.Absolutepage = Clng(session("Pagenum")) //确定当前页的第一条记录号

// 显示当前页

同第一种方法,此处略过。

// Nav 翻页按钮设置

<form method="GET" action="emp2.asp">

<input type="submit" name="NAV" Value="首页">

<input type="submit" value="上页" name="NAV">

<input type="submit" value="下页" name="NAV">

<input type="submit" value="末页" name="NAV"></form>

第三种:用Grid控件设计分页

所有的方法中,这种方法最容易。你只需拖DTC中的Recordset控件和Grid控件到asp 网页中就行了。而且,你还能选择是在服务器平台还是在客户端平台控制翻页。缺点就是你必须用它给定的格式显示,而不能自己自由控制表格的显示格式。

方法如下:

在VI6.0中建一个工程emp.vip。再在工程中添加一个asp网页:emp3.asp。

第一步:选VI6.0菜单条上的“add data connect…”,按开发工具的导航提示,你就可以很容易地建立与Employee.mdb数据库的连接。从DTC工具栏中拖一个Recordset控件到网页中,并设置其属性。具体如图:

当你拖控件到网页中时,VI6.0会自动提示你“是否使用Scripting object model”,按yes。

第三步:从DTC工具栏中拖一个Grid控件到网页中,然后单击鼠标右键,设置其属性,如:选在第二步中创建的Recordset控件名,选择emp表中的字段,每页显示多少条记录以及显示格式等。非常简单方便,只要照着导航提示做就行了。

第四种:DHTML法一。

数据记录显示在一个HTML表中。它利用DHTML中表的数据绑定特性来控制记录的分页显示。缺点就是你的翻页方法将被限制为一种特定的方式:只能“上页”和“下页”而不能“首页”和“末页”。由于是在客户端控制翻页,所以,这种和第五种方法是速度最快的,但遗憾的是它只能在支持DHTML的浏览器上使用。

在DHTML中,<TABLE>的DATASRC属性可使表格绑定到一个数据源,另一个属性DATAPAGESIZE可指定一页一次显示的记录数。

我们来看下面的例子:

第一步:拖Recordset控件到新建的网页emp4.htm中,设置其属性,方法同第三种,此处略。

第二步:输入下面的代码:

<TABLE ID="Table1" DATASRC="#Recordset1_RDS" DATAPAGESIZE=5> //假定前面设定Recordset控件名为Recordset1。每页显示5条记录。

<THEAD>

<TH ALIGN="left" WIDTH=150>Emp ID</TH> //输出表头

<TH ALIGN="left" WIDTH=200>Last Name</TH>

<TH ALIGN="left" WIDTH=200>First Name</TH>

</THEAD>

<TR>

<TD><DIV DATAFLD="Emp ID"></DIV></TD> //输出表内容

<TD><DIV DATAFLD="Last Name"></DIV></TD>

<TD><DIV DATAFLD="First Name"></DIV></TD>

</TR>

</TABLE>

第三步:然后,增加一对DTCs Button按钮控件来做翻页导航,一个命名为

“btnPrevious”(上一页),一个命名为“btnNext”(下一页)。它们相应的脚本如下:

<SCRIPT LANGUAGE=VBScript>

Function btnPrevious_onclick()

Table1.previousPage()

End Function

Function btnNext_onclick()

Table1.nextPage()

End Function

</SCRIPT>

第五种:DHTML法二

这种方法是对第四种方法的完善。采用手工编写脚本的方法,使我们能做“首页”,“末页”翻页导航按钮,并能确定每条记录的位置(记录号)。由于篇幅的关系,我在下面只介绍一个具体例子,并给出简要说明。其它关于DHTML和Recordset控件的一些属性和方法请读者自行参照相关书籍。这里需要提请注意的是,Recordset控件与第一、二种方法中介绍的ADO的Recordset对象有些不同:Recordset控件没有直接给出pagesize和pagecount等属性,需要用下面介绍的方法来计算。

第一步:拖Recordset控件到新建的网页emp5.htm中,名字为Recordset1,设置其属性,方法同第三种,此处略。

第二步:定义三个全局变量和编写Recordset1的ondatasetcomplete(数据设置完成时)脚本。

Dim gCurrentPageNumber //当前页号

Dim gMaxPageNumber //最大页数

Dim gRecordsPerPage //每页显示记录数

gRecordsPerPage = 5 // 设置每页显示记录数为5条记录。

Function Recordset1_ondatasetcomplete()

totalRecordCount = Recordset1.getCount() //总的记录条数

gMaxPageNumber = Int(totalRecordCount / gRecordsPerPage) //获得最大页数

If (totalRecordCount Mod gRecordsPerPage) > 0 then

gMaxPageNumber = gMaxPageNumber + 1

End If

End Function

第三步:创建翻页导航按钮。

Function btnFirst_onclick() ’ 翻到首页

gCurrentPageNumber = 1

DisplayData()

End Function

Function btnPrevious_onclick() ’ 翻到上一页

if gCurrentPageNumber > 1 Then

gCurrentPageNumber = gCurrentPageNumber - 1

DisplayData()

End If

End Function

Function btnNext_onclick() ’ 翻到下一页

if gCurrentPageNumber < gMaxPageNumber Then

gCurrentPageNumber = gCurrentPageNumber + 1

DisplayData()

End If

End Function

Function btnLast_onclick() ’翻到末页

gCurrentPageNumber = gMaxPageNumber

DisplayData()

End Function

第四步:编写显示每一页的函数。其中使用了许多DHTML的属性和方法,请读者自行参考相关书籍。

Sub DisplayData()

startRecord = ((gCurrentPageNumber - 1) * gRecordsPerPage) + 1 //计算每一页开始显示的记录号数(位置,第几条)

rowCtr = 1

lblPageNumber.innerHTML = gCurrentPageNumber & "/" & gMaxPageNumber

For recordPtr = startRecord To (startRecord + gRecordsPerPage - 1) //循环显示一页的各条记录

If recordPtr > Recordset1.getCount() Then //显示空表

Table1.rows(rowCtr).cells(0).innerHTML = "<P></P>"

Table1.rows(rowCtr).cells(1).innerHTML = "<P></P>"

Table1.rows(rowCtr).cells(2).innerHTML = "<P></P>"

Table1.rows(rowCtr).cells(3).innerHTML = "<P></P>"

Else //具体显示每一页

Recordset1.moveAbsolute(recordPtr) //移动记录指针。

empID = Recordset1.fields.getValue("emp ID")

empLName = Recordset1.fields.getValue("first name")

empFName = Recordset1.fields.getValue("last name")

Table1.rows(rowCtr).cells(0).innerText = recordPtr ’ Counter

Table1.rows(rowCtr).cells(1).innerText = empID

Table1.rows(rowCtr).cells(2).innerText = empLName

Table1.rows(rowCtr).cells(3).innerText = empFName

End If

rowCtr = rowCtr + 1

Next

End Sub

另外,我们还需要在window对象的onload事件中编写如下脚本:

For rowCtr = 1 to gRecordsPerPage

Table1.insertRow(rowCtr) ’ 插一新列

For cellCtr = 0 to 3

Table1.rows(rowCtr).insertCell()

Next

Next

第六种:服务器端控制翻页方法。

如果我们在服务器端对数据进行分页形成HTML语句后再输出到客户端,就不会存在浏览器不支持DHTML的问题了。可是用服务器端法使得我们每次翻页时,都得让Recordset控件重新产生一次,因此速度肯定要比用DHTML的方法慢。但如果服务器足够快的话,这点慢客户是察觉不到的。

下面的例子中,我将介绍一个新的DTC控件:PageObject。这个控件使被指定的网页成为一个网页对象,用户在此网页的服务器脚本中组织的子程序和函数可被看作是该网页对象的方法。它提供了管理状态信息的一种先进的方法:网页对象有一些属性(变量),用户可以定义这些属性的生存期。因为以上这些特性,使我们在编制翻页的脚本时非常方便。

但这种方法的缺点是:当你按了“上页”或“下页”按钮后,再浏览器上的按刷新按钮,网页会自动翻页。另外,如果按了浏览器上的“回退”按钮后,再按翻页按钮,可能会出现一次乱翻。这都是因为网页对象属性(全局变量)造成的。

第一步:拖Recordset控件到新建的网页emp6.asp中,名字为Recordset1,设置其属性,方法同第三种,此处略。

第二步:拖PageObject控件到网页中,取名叫emplist。然后右键单击此控件打开属性页并设置MaxPageNumber,RecordsPerPage,CurrrentPageNumber三个属性(全局变量)。VI6.0可用get和set方法来读写它们的值,具体用法请查阅相关资料。

第三步:编写Recordset1的ondatasetcomplete事件。

Function Recordset1_ondatasetcomplete()

recordsPerPage = 5

empList.setRecordsPerPage(recordsPerPage)//设置网页对象每页记录条数属性为5 totalRecordCount = Recordset1.getCount()//获得记录集的总条数

mpn = Int(totalRecordCount / recordsPerPage) //计算出mpn为总页数

If (totalRecordCount Mod recordsPerPage) > 0 then

mpn = mpn + 1

End If

empList.setMaxPageNumber(mpn)

End Function

第四步:拖四个button控件到网页中,编写翻页控制脚本。我们主要是通过改变网页对象的CurrentPageNumber属性的值来实现翻页。

Function btnFirst_onclick()’ 翻到首页

empList.setCurrentPageNumber(1)

End Function

Function btnPrevious_onclick()’ 翻到上一页

cpn = empList.getCurrentPageNumber()

if cpn > 1 Then

empList.setCurrentPageNumber(cpn - 1)

End If

End Function

Function btnNext_onclick()’ 翻到下一页

cpn = empList.getCurrentPageNumber()

if cpn < empList.getMaxPageNumber() then

empList.setCurrentPageNumber(cpn + 1)

End If

End Function

Function btnLast_onclick() ’ 翻到末页

empList.setCurrentPageNumber( empList.getMaxPageNumber() )

End Function

为保证首次进入该页时,显示的是第一页,我们还得编写该网页对象的onEnter事件。

Function empList_onEnter()

If empList.firstEntered Then

empList.setCurrentPageNumber(1)

End If

End Function

第五步:编写显示每一页的脚本。

<HR><TABLE BORDER=0><TR>//显示表头

<TH ALIGN="left" WIDTH=35></TH>

<TH ALIGN="left" WIDTH=150>Emp ID</TH>

<TH ALIGN="left" WIDTH=200>Last Name</TH>

<TH ALIGN="left" WIDTH=200>First Name</TH></TR>

<%

pageNumber = empList.getCurrentPageNumber()//计算翻页所需的各种参数,同DHTML法二recordsPerPage = empList.getRecordsPerPage()

startRecord = ((pageNumber - 1) * recordsPerPage) + 1

lastRecord = Recordset1.getCount()

For recordPtr = startRecord To (startRecord + recordsPerPage - 1)%>

<%If Recordset1.EOF = True Then%>

<TR>

<TD></TD>

<TD></TD>

<TD></TD>

<TD></TD>

</TR>

<%Else%>

<%Recordset1.moveAbsolute(recordPtr)%>

<TR>

<% If recordPtr <= lastRecord Then %>

<TD><%=recordptr%></TD>

<%Else%>

<TD></TD>

<% End If %>

<TD><%=Recordset1.fields.getValue("emp ID")%></TD>

<TD><%=Recordset1.fields.getValue("last name")%></TD>

<TD><%=Recordset1.fields.getValue("first name")%></TD>

</TR>

<%End If%>

<%Next%>

</TABLE><HR>

第七种:Data Environment Object Model(数据环境对象模型)法

Data Environment对象模型把ADO对象模型及它的对象----“Connection”,“Command”,“Recordset”,“Field”以及“Parameter”对象----抽象到一个更加容易的表单中。Data Environment Object Model把命令显露为方法。用户可以调用这些方法,这些方法会执行这些命令并返回所得到的记录集。关于DEOM对象模型详细资料请参考相关书籍。我们来看下面网页emp7.asp的例子:

第一步:在VI6.0的“project Explorer”窗口中的工程项目上右击鼠标并从弹出式菜单选择“Add Data Connection”。根据VI给出的导航提示建立一个到数据库的连接之后,用户就添加了一个实现从ASP应用程序访问数据库的数据命令。同时,你将会在“Project Explorer”窗口中的global.asa文件下方看到一个“Data Environment”对象。

第二步:右击“Data Environment”对象然后从弹出式菜单中选择“Add Data Command”选项,添加一个数据命令Command1。根据VI6.0的导航提示,你可以在Command1 Properties 弹出窗口的Genetal页中选SQL Statement,输入:select * from emp。按OK返回。

第三步:你创建了这个数据命令后,就已经为该Data Environment对象创建了一个方法,然后就可以从脚本中调用这个方法,而且该方法将会给用户返回一个记录集。

thisPage.createDE() //在SOM模式下,thisPage表示当前网页对象,createDE()方法创建了DE对象。

https://www.doczj.com/doc/882269768.html,mand1//执行DE对象的命令,后面可代参数,做有条件查询时很有用。

Set rs=DE.rsCommand1//DE.rscommand1使得rs对象完全等同于一个ADO的Recordset对象。

第四步:因为rs为ADO对象,所以,以下的实现翻页代码完全参照以上介绍的几种方法,此处略过。

其它还有如FrontPage2000的数据库导航中实现的方法等,因与本主题无关,此处略。

综上所述,前面介绍的每种方法都包含了很多新的技术,由于篇幅的关系,无法深入。本文只是想通过实现翻页这一具体的例子来介绍ASP网页编程的多种方法;让大家亲身体验一下VI6.0在编制网页中的强大功能;了解和熟悉微软在网页编程中提出的ADO、DHTML、DTC 控件、SOM对象模型和DEOM对象模型的使用方法;希望能给大家在编制网页时提供更多的选择和参考。

分页显示

<%set rs=server.createobject("adodb.recordset")

rs.open "select * from givewant where flag=1 order by time1 desc",conn,1,1

if rs.recordcount=0 then

%> 对不起!没有你要的信息!

<%

response.end

Else

set rs2=server.createobject("adodb.recordset")

rs2.open "select * from givewant where flag=1 order by time1 desc",conn,1,1 if rs2.recordcount>0 then

rs2.PageSize =15 '每页记录条数

iCount=rs2.RecordCount '记录总数

iPageSize=rs2.PageSize

maxpage=rs2.PageCount

page=request("page")

if Not IsNumeric(page) or page="" then

page=1

else

page=cint(page)

end if

if page<1 then

page=1

elseif page>maxpage then

page=maxpage

end if

rs2.AbsolutePage=Page

if page=maxpage then

x=iCount-(maxpage-1)*iPageSize

else

x=iPageSize

end if

For i=1 To x

%>

<%=rs2("givewanttitle")%>

 

<%response.write ""

if len(trim(rs("content")))>15 then

response.write left(trim(rs2("content")),13)&".."

else

response.write trim(rs2("content"))

end if

response.write "              &n bsp;  详情..."

%>

<%=rs2("faburen")%>

<%

rs2.movenext

next

call PageControl(iCount,maxpage,page,"border=0 align=center","

") end if

rs2.close

set rs2=Nothing

Sub PageControl(iCount,pagecount,page,table_style,font_style)

'生成上一页下一页链接

Dim query, a, x, temp

action = "http://" & Request.ServerVariables("HTTP_HOST") & Request.ServerVariables("SCRIPT_NAME")

query = Split(Request.ServerVariables("QUERY_STRING"), "&")

For Each x In query

a = Split(x, "=")

If StrComp(a(0), "page", vbTextCompare) <> 0 Then

temp = temp & a(0) & "=" & a(1) & "&"

End If

Next

Response.Write("

" & vbCrLf )

Response.Write("

" & vbCrLf )

Response.Write("

" & vbCrLf )

Response.Write("

" & vbCrLf )

Response.Write("

" & vbCrLf )

Response.Write(font_style & vbCrLf )

if page<=1 then

Response.Write ("首页 " & vbCrLf)

Response.Write ("上一页 " & vbCrLf)

else

Response.Write("首页 " & vbCrLf)

Response.Write("上一页 " & vbCrLf)

end if

if page>=pagecount then

Response.Write ("下一页 " & vbCrLf)

Response.Write ("尾页 " & vbCrLf)

else

Response.Write("下一页 " & vbCrLf)

Response.Write("尾页 " & vbCrLf)

end if

Response.Write(" 页次:" & page & "/" & pageCount & "页" & vbCrLf)

Response.Write(" 共有 " & iCount & " 条信息" & vbCrLf)

Response.Write(" 转到" & "" & "页" & vbCrLf & "")

Response.Write("

" & vbCrLf )

End Sub

%>

<%

end If

%>

<%

if session("admin")="" then

conn.close

set conn = nothing

response.Write ""

response.End

else

if request.cookies("sundxshop")("admin")="" then

conn.close

用ASP连接数据库的几种方法

用ASP连接数据库的几种方法 用ASP连接DBF、DBC、MDB、Excel、SQL Server型数据库的方法: 一、ASP的对象存取数据库方法 在ASP中,用来存取数据库的对象统称ADO(Active Data Objects),主要含有三种对象:Connection、Recordset 、Command Connection:负责打开或连接数据 Recordset:负责存取数据表 Command:负责对数据库执行行动查询命令 二、连接各数据库的驱动程序 连接各数据库可以使用驱动程序,也可以使用数据源,不过我建议大家使用驱动程序,因为使用驱动程序非常方便、简单,而使用数据源比较麻烦。 驱动程序适用数据库类型 Microsoft.Jet.OLEDB.4.0 Mdb Microsoft Access Driver Access Microsoft dBase Driver Dbase Microsoft Excel Driver Excel Microsoft Visual FoxPro Driver Dbc SQLOLEDB.1 SQL srver7.0 而我们在一般情况下使用Access的数据库比较多,在这里我建议大家连接Access数据库使用下面的方法: dim conn set conn = server.createobject("adodb.connection") conn.open = "provider=microsoft.jet.oledb.4.0;" & "data source = " & server.mappath("../db/bbs.mdb") 其中../db/bbs.mdb是你的数据库存放的相对路径!如果你的数据库和ASP文件在同一目录下,你只要这样写就可以了:

ASP中数据库调用时常见错误的现象和解决

下面是虚机维护中,经常碰到的一些ASP程序中的数据库调用的错误,现收集整理如下:ADODB.Recordset 错误'800a0bb9' 变量或者类型不正确,或者不在可以接受的范围之内,要不就是与其他数据冲突。 产生错误可能原因: 1.这个错误多出现在类似语句处:“rs.Open sql,conn,1,1”,原因是数据库连接conn对象未打开。 ―――――――――――――――――――――――――――――――――――― 不能打开注册表关键字(8007000e) Microsoft OLE DB Provider for ODBC Drivers 错误'8007000e' [Microsoft] [ODBC Microsoft Access Driver]常见错误不能打开注册表关键字'Temporary (volatile) Jet DSN for process 0x11b4 Thread 0x1a4c DBC 0x9d34354 Jet'。 产生错误可能原因: 1.打开数据库时写法不对,标准的ACCESS数据库调用写法: "driver={Microsoft Access Driver (*.mdb)};dbq=" & server.mappath("db.MDB") 2. 正在上传数据库文件。―――――――――――――――――――――――――――――――――――― 参数不足,期待是1 (80040e10) Microsoft OLE DB Provider for ODBC Drivers 错误'80040e10' [Microsoft][ODBC Microsoft Access Driver] 参数不足,期待是1。 产生错误可能原因: 1.打开数据的SQL查询语句WHERE后面条件子句有问题,一般是缺少逻辑比较符号或者是字段名不正确。 ―――――――――――――――――――――――――――――――――――― 一般性网络错误。请检查网络文档(80004005)

ASP连接Access或SQLServer数据库的终极代码

ASP连接Access或SQLServer数据库的终极代码 作者:佚名来源:本站整理发布时间:2010-01-11 10:26:29 搞了这么久的ASP,希望本篇能帮助一些初学者。 <% On Error Resume Next Dim Data_base Data_base = 0 '1为MSSQLServer2000 其它为Access Set Conn=Server.CreateObject("Adodb.Connection")

IF Data_base=1 Then '------------------------------------------------------------------------------------- Dim dbconn,dbip,dbdns,dbname,dbuid,dbpwd dbconn = 1 '链接方式1为OLEDB链接2为驱动链接3为DNS链接dbip = "(local)" '数据库所在的IP地址,如果是本地数据库则为:"(local)" dbdns = "数据源DNS名称" '数据库DNS名 dbname = "MSOW" '数据库名称 dbuid = "sa" '数据库用户名 dbpwd = "********" '数据库密码 '------------------------------------------------------------------------------------- Select CASE dbconn

Case 1 Conn.Open "Provider=SQLOLEDB;User ;Password="&dbpwd&";Initial Catalog="&dbname&";Data Source="&dbip&";" Case 2 Conn.open "DRIVER={SQL Server};SERVER="&dbip&";UID="&dbuid&";PWD="&dbpwd&";DATABASE="&dbname&"" Case 3 Conn.open "DSN="&dbdns&";UID="&dbuid&";PWD="&dbpwd&";DATABASE="&dbname&"" End Select Else '-------------------------------------------------------------------------------------

asp数据库成excel文件代码

asp数据库数据生成excel文件: 生成EXCEL文件实例 在线生成EXCEL


<% if Request("act") = "" then Response.Write "生成EXCEL文件实例" else dim conn,strconn strconn="driver={SQL Server};server=wen;uid=sa;pwd=;database=DB_Test" set conn=server.CreateObject("adodb.connection") conn.Open strconn dim rs,sql,filename,fs,myfile,x Set fs = server.CreateObject("scripting.filesystemobject") '--假设你想让生成的EXCEL文件做如下的存放 filename = Server.MapPath("online.xls") '--如果原来的EXCEL文件存在的话就删除 if fs.FileExists(filename) then fs.DeleteFile(filename) end if '--创建EXCEL文件 set myfile = fs.CreateTextFile(filename,true) Set rs = Server.CreateObject("ADODB.Recordset") '--从数据库中把你想放到EXCEL中的数据读出来 sql = "select * from Tb_Execl order by id desc" rs.Open sql,conn,1,1 if rs.EOF and rs.BOF then else dim strLine,responsestr strLine="" For each x in rs.fields strLine = strLine & https://www.doczj.com/doc/882269768.html, & chr(9) Next '--将表的列名先写入EXCEL myfile.writeline strLine Do while Not rs.EOF strLine=""

用ASP连接读写ACCESS数据库实例

(一)数据库的选择: 有许多的数据库你可以选择,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以达到存储数据的功能。那么到底选择什么数据库最合适呢?其中SQL SERVER是服务器级的,足以应付每天上万次的访问量。对于非服务器级的数据库建议使用ACCESS97。 因为: (1)只要安装了PWS或IIS4肯定有ACCESS的ODBC驱动,即你的系统肯定支持ACCESS数据库的存取。 (2)ACCESS支持的SQL指令非常齐全。 (3)ACCESS ODBC驱动程序的效率非常高。虽然它不是服务器级的数据库,但是作为中小型企业内部网的数据库支持还是绰绰有余的。 (4)ACCESS97在OFFICE97中就有,非常方便得到和使用。 本文就以ACCESS数据库为准介绍基于WEB的数据库存取方法。 (二)例子:我们建立一个“客户”数据库,需要保存如下的客户资料:客户名称、联络人姓名、所在城市、电话号码。 (1)首先建立ACCESS数据库customer.mdb(今后有用的)。 建立如下字段:客户名称、联络人姓名、所在城市、电话号码、客户编号、时间。将表保存为" 客户"(今后有用的,===>看看图)。注意:建立字段时多作了2个(客户编号、时间),因为在今后排序时要用到它们。建议今后做数据库时最好都加上这2项,不会没用的。此外,在保存表时ACCESS 会询问是否建立一个住关键字,我们不需要它所以不必建立。还有:时间字段的"默认值"设成"now()",即去系统当时的时间。同时将索引项设成"有(允许重复)",含义:WEB上极有可能同时存取数据,所以允许重复,索引设成"有"可以加快排序速度。===>看看图 (2)建立递交表单add.htm: 源代码如下: 添加数据库记录

添加数据库记录

公司名称:

利用ASP+VBScript技术开发Web数据库查询系统

利用ASP蚔BScript技术开发Web数据库查询系统 利用ASP和VBScript技术开发Web数据库查询系统 焦纯李洪义范晓宇陈马丁 摘要:Web数据库查询是网上最普遍的应用之一。而ASP模型是创建服务器端Web应用程序最重要的架构之一。ASP动态网页技术和VBScript脚本语言的结合又使得传统VB程序员在开发Web应用程序时具有较大的优势。本文结合一个Web上课程表查询的实例对ASP和VBScript两种技术的结合使用作了详细的说明,同时对各种开发Web应用程序的方法作了详细的比较。 关键词:ASP VBScript Web应用程序数据库查询ADO 一、ASP的工作机制和环境 ASP(即Active Server Pages)是一种服务器端的脚本开发环境。通过ASP能创建和运行动态、交互和高效的页面组成的Web服务程序。对于程序员,所谓ASP, 简单地说,就是在HTML文件中引入了两个扩展的成对的HTML标记〈%和%〉,同时文件的扩展名改为 .asp。 同HTML文件一样ASP文件也是文本文件,包括文本、HTML标记和ASP脚本语句(用〈%和%〉界定符标记)。它以.asp为扩展名,区别于一般的HTML文件。任何文本编辑器都可以制作ASP文件。 在传统的静态HTML的模式中,浏览器通过HTTP协议向Web服务器请求页面,服务器收到请求后发送一个页面给浏览器,由浏览器进行格式化并显示数据。这种模式只为用户与Web服务器之间提供了有限的交互,静态HTML的内容必须进行手动的编辑和修改。 HTML语言本身是静态的,要想使其具有交互的动态功能,通常可采用的技术包括:Java,JavaScript,VBScript/ActiveX,CGI,ISAPI/NSAPI等。Java,JavaScript,VBScript/ActiveX是客户端的技术,它们最大的缺点就是浏览器可能根本不支持这种技术,比如网景的Navigator就不支持功能非常强大的VBScipt/ActiveX,即使是已经成为业界标准的Java,一些老版本的浏览器也不支持。而采用公共网关接口CGI及ISAPI/NSAPI等接口,由于它们是服务器端的技术,它们的共同缺点是HTML的编写与程序的编写是分离的, 必须用不同的工具分别编写, 然后在HTML文件中调用CGI, ISAPI 或NSAPI程序, 调试比较麻烦。事实上,它们与HTML文件的编写是两个完全不同的设计过程。 作为一种新技术,ASP则不同。ASP是微软公司IIS3.0中的一个组件,它实际上是一个服务器端的脚本环境。当脚本运行在服务器上(注意不是客户机)时,Web服务器完成所有的工作,包括动态生成HTML页面并传送到用户的浏览器上。程序员不必担心浏览器是否能处理你的页面,因为Web服务器已经全部替浏览器完成页面的转化工作,对浏览器而言,见到的还是普通的HTML页面。由此可见,程序员可以通过ASP直接添加可执行的脚本到HTML文件中。这样HTML开发和脚本开发成为同一件事情,使动态交互页面的开发成为一个整体,开发与维护工作变得简单、快捷。程序员可以集中精力于Web站点外观的设计,用一些动态的元素修饰你的页面。

asp调用mssql存储过程之完全示例.

?asp调用mssql存储过程之完全示例 可能有不少朋友使用SQL SERVER做开发也已经有段日子,但还没有或者很少在项目中使用存储过程,或许有些朋友认为根本没有必要使用存储过程等等。其实当你一个项目做完到了维护阶段时,就会发现存储过程给我们带来了好处了,修改方便,不能去改我们的应用程序,只需要改存储过程的内容,而且还可以使我们的程序速度得到提高。 SQL SERVER 联机丛书中的定义: 存储过程是保存起来的可以接受和返回用户提供的参数的 Transact-SQL 语句的集合。 可以创建一个过程供永久使用,或在一个会话中临时使用(局部临时过程),或在所有会话中临时使用(全局临时过程)。 也可以创建在 Microsoft SQL Server 启动时自动运行的存储过程。 要使用存储过程,首先我们必需熟悉一些基本的T-SQL语句,因为存储过程是由于一组T-SQL语句构成的,并且,我们需要了解一些关于函数、过程的概念,因为我们需要在应用程序中调用存储过程,就像我们调用应用程序的函数一样,不过调用的方法有些不同。 下面我们来看一下存储过程的建立和使用方法。 一、创建存储过程 和数据表一样,在使用之前我们需要创建存储过程,它的简明语法是:

例: 以下是引用片段: CREATE PROC upGetUserName @intUserId INT, @ostrUserName NVARCHAR(20 OUTPUT -- 要输出的参数AS BEGIN -- 将uName的值赋给@ostrUserName 变量,即要输出的参数 SELECT @ostrUserName=uName FROM uUser WHERE uId=@intUserId END 其中 CREATE PROC 语句(完整语句为CREATE PROCEDURE)的意思就是告诉SQL SERVER,现在需要建立一个存储过程,upGetUserName 就是存储过程名称,@intUserId 和 @ostrUserName 分别是该存储过程的两个参数,注意,在SQL SERVER中,所有用户定义的变量都以“@”开头,OUTPUT关键字表示这个参数是用来输出的,AS之后就是存储过程内容了。只要将以上代码在“查询分析器”里执行一次,SQL SERVER就会在当前数据库中创建一个名为“upGetUserName”的存储过程。你可以打开“企业管理器”,选择当前操作的数据库,然后在左边的树型列表中选择“存储过程”,此时就可以在右边的列表中看到你刚刚创建的存储过程了(如果没有,刷新一下即可)。 二、存储过程的调用

用ASP连接各种数据库的方法(经典)

用ASP连接DBF、DBC、MDB、Excel、SQL Server型数据库的方法2008-08-30 15:02一般来说,一个真正的、完整的站点是离不开数据库的,因为实际应用中,需要保存的数据很多,而且这些数据之间往往还有关联,利用数据库来管理这些数据,可以很方便的查询和更新。数据库有很多种,如:Fox 数据库(.dbf)、Access 数据库(.mdb)、Informix、Oracle 和SQL Server 等等,在这里,我将以Microsoft Access 数据库为例来说明ASP是如何访问数据库的。 常用数据库语句 1.SELECT 语句:命令数据库引擎从数据库里返回信息,作为一组记录。 2.INSERT INTO 语句:添加一个或多个记录至一个表。 3.UPDA TE 语句:创建更新查询来改变基于特定准则的指定表中的字段值。 4.DELETE 语句:创建一个删除查询把记录从FROM 子句列出并符合WHERE 子句的一个或更多的表中清除。 5.EXECUTE 语句:用于激活PROCEDURE(过程) 用ASP 来做一个自己的通讯录练练手吧…… 一、建立数据库: 用Microsoft Access 建立一个名为data.mdb 的空数据库,使用设计器创建一个新表。输入以下几个字段: 字段名称数据类型说明其它 ID自动编号数据标识字段大小:长整型新值:递增索引:有(无重复)username文本姓名缺省值 usermail文本E-mail缺省值 view数字查看次数字段大小:长整型默认值:0索引:无

indate时间日期加入时间缺省值 保存为data.mdb 文件,为了便于说明,只是做了一个比较简单的库。 二、连接数据库 方法1: Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("data.mdb") 方法2: Set conn = Server.CreateObject("ADODB.Connection") conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="&Server.MapPath("data.mdb") 注意:一个页面中,只要连接一次就可以了,数据库使用完后要及时关闭连接。conn.Close Set conn = Nothing 三、添加新记录到数据库 Set conn = Server.CreateObject("ADODB.Connection") conn.Open "driver={Microsoft Access Driver (*.mdb)};dbq="&Server.MapPath("data.mdb") username = "风云突变" usermail = "fytb@https://www.doczj.com/doc/882269768.html," indate = Now() sql = "insert into data (username,usermail,indata) values('"&username&"','"&usermail&"','"&indate&"')"

asp连接SQL数据库

Asp连接sql数据库方案 ******************************* 按要求建好数据库后,需要建立网站页面与后台服务器的连接,页面名称为conn.asp.以后当需要对程序中数据库进行操作时,只需要用 就可以直接调用该程序 ,打开数据库,提高程序的可读性. 代码如下: <%set conn=Server.CreateObject("ADODB.Connection") '创建一个数据库连接对象conn,方便以后调用 connstr="Provider=SQLOLEDB;Data Source=(local);Initial Catalog=test;User ID=sa;Password=***" ' 创建一个数据库的recordset对象 conn.Open connstr '打开数据库 '方便以后调用 %> *****************************方法1 <% dim conn set conn=server.createobject("ADODB.connection") con.open "PROVIDER=SQLOLEDB;DATA SOURCE=SQL服务器名称或IP地址;UID=sa;PWD=数据库密码 ;DATABASE=数据库名称 %> 建立记录集对象: set rs=server.createobject("adodb.recordset") rs.open SQL语句,conn,3,2 *******************************************************************************

asp调用数据库代码

asp调用数据库代码 1.ASP与Access数据库连接: 2.ASP与SQL数据库连接: 建立记录集对象: setrs=server.createobject("adodb.recordset") rs.openSQL语句,conn,3,2 3.SQL常用命令使用方法: (1)数据记录筛选: sql="select*from数据表where字段名=字段值orderby字段名[desc]" sql="select*from数据表where字段名like'%字段值%'orderby 字段名[desc]" sql="selecttop10*from数据表where字段名orderby字段名[desc]" sql="select*from数据表where字段名in('值1','值2','值3')" sql="select*from数据表where字段名between值1and值2" (2)更新数据记录: sql="update数据表set字段名=字段值where条件表达式" sql="update数据表set字段1=值1,字段2=值2……字段n=

值nwhere条件表达式" (3)删除数据记录: sql="deletefrom数据表where条件表达式" sql="deletefrom数据表"(将数据表所有记录删除) (4)添加数据记录: sql="insertinto数据表(字段1,字段2,字段3…)values(值1,值2,值3…)" sql="insertinto目标数据表select*from源数据表"(把源数据表的记录添加到目标数据表) (5)数据记录统计函数: A VG(字段名)得出一个表格栏平均值 COUNT(*¦字段名)对数据行数的统计或对某一栏有值的数据行数统计 MAX(字段名)取得一个表格栏最大的值 MIN(字段名)取得一个表格栏最小的值 SUM(字段名)把数据栏的值相加 引用以上函数的方法: sql="selectsum(字段名)as别名from数据表where条件表达式" setrs=conn.excute(sql) 用rs("别名")获取统的计值,其它函数运用同上。(5)数据表的建立和删除: CREATETABLE数据表名称(字段1类型1(长度),字段2类型2(长度)……)

ASP连接access数据库的两种方法、如何读取数据库内容

我的ASP经验之路(4)--连接access数据库的两种方法、读取数据库内容 这篇主要介绍以下两个问题:asp连接access数据库常用的两种方法、asp创建记录集与如何读取数据库的内容。 ASP最常连接的是ACCESS与MSSQL两种数据库,本文先介绍简单的连接ACCESS数据库的两种常用方法。 假设数据库名称为data.mdb,位于根目录下,与conn.asp文件同一目录。 连接数据库文件conn.asp写法如下: 第一种: <% dim conn dim connstr connstr="DBQ="+server.mappath("data.mdb")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" set conn=server.createobject("ADODB.CONNECTION") '创建数据库连接对象 conn.open connstr '连接数据库 %> 第二种: <% dim conn dim connstr Connstr="Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.MapPath("data.mdb") Set conn = Server.CreateObject("ADODB.Connection") Conn.Open Connstr %> 接下来,我们看下asp是如何创建记录集以及如何来读取数据库里的内容的。 首先,我们要建一个数据库,里面放些需要读取的内容。 1、建立一个数据库文件,名称估且命为data.mdb ,里面准备存放一些公司企业的电话地址等内容。数 据库中建一个名为company的表,表设计以下四个字段:companyname,tel,address,website (公司名称,电话,地址,网址),字段类型全部选择“文本”,字段大小设置为250,创建好表后,打开表,自己输入随意输入几条记录值 (所有建立数据库的具体操作本文略过) 建好后,表设计如下图:

ASP中使用SQL语句教程

1. SELECT 语句 在SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作: SELECT what FROM whichTable WHERE criteria 执行以上语句就会创建一个存放其结果的查询。 而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量: SQL = "SELECT what FROM whichTable WHERE criteria" 明白了ASP下SQL"说话"的方式,接下来如法炮制即可,只要满足你的需要,传统的SQL查询模式和条件查询都能派用场。 举例说明,不妨假设你的数据库内有个数据表,名字是Products ,现在你想取出这个表里的全部记录。然后你就编写了下面的代码: SQL ="SELECT * FROM Products" 以上代码--SQL语句的作用就是取出表内的全部数据--执行后将会选出数据表内的全部记录。不过,要是只想从表内取出某个特定列,比如p_name。那就不能用 * 通配符了,这里得键入具体某列的名字,代码如下: SQL ="SELECT p_name FROM Products" 执行以上查询之后Products 表内、p_name 列的内容就会全被选取出来。 2. 用WHERE子句设置查询条件 有的时候取出全部数据库记录也许正好满足你的要求,不过,在大多数情况下我们通常只需得到部分记录。这样一来该如何设计查询呢?当然会更费点脑筋了,何况本文也存心不想让你去用那个什么劳什子的recordset。 举个例子,假如你只打算取出p_name 记录,而且这些记录的名字必须以字母w打头,那么你就要用到下面的WHERE 子句了: SQL ="SELECT p_name FROM Products WHERE p_name LIKE 'W%'" WHERE 关键词的后面跟着用来过滤数据的条件,有了这些条件的帮助,只有满足一定标准的数据才会被查询出来。在以上的例子里,查询的结果只会得到名字以w 打头的p_name 记录。 以上例子中,百分比符号(%)的含义是指示查询返回所有w 字母打头而且后面是任何数据甚至没有数据的记录条目。所以,在执行以上查询的时候, west 和 willow 就会从Products 表内被选取出来并存放在查询里。 就像你看到的那样,只要仔细地设计SELECT 语句,你就可以限制recordset 中返回的信息

ASP读取数据库问题

ASP读取数据库问题 rs = Server.CreateObject("ADODB.RecordSet") rs.Open(sqlStr,conn,1,A) 注:A=1表示读取数据;A=3表示新增、修改或删除数据。 在RecordSet组件中,常用的属性和方法有: rs.Fields.Count:RecordSet对象字段数。 rs(i).Name:第i个字段的名称,i为0至rs.Fields.Count-1 rs(i):第i个字段的数据,i为0至rs.Fields.Count-1 rs("字段名"):指定字段的数据。 rs.RecordCount:数据记录总数。 rs.EOF:是否最后一条记录。 rs.MoveFirst:指向第一条记录。 rs.MoveLast:指向最后一条记录。 rs.MovePrev:指向上一条记录。 rs.MoveNext:指向下一条记录。 rs.GetRows:将数据放入数组中。 rs.Properties.Count:ADO的ResultSet或Connection的属性个数。rs.Properties(item).Name:ADO的ResultSet或Connection的名称。rs.Properties:ADO的ResultSet或Connection的值。 rs.close():关闭连接。 属性和方法分开列出

属性: AbsolutePage属性:当RecordSet对象设有分页时,返回当前页码。 AbsolutePosition属性:当前指针的绝对位置。 ActiveConnection属性:指明进行SQL语句的数据库连接。 EOF属性:若指针位于第一条记录之前,返回TRUE、否则返回FALSE。 Bookmark属性:将指针设置在某条记录。 CursorLocation属性:设置或返回光标提供者的位置,若设为2(adUseServer)表示使用服务器端光标(默认);若设为3(adUseClient)表示使用浏览器端光标。 CursorType属性:指出RecordSet对象中使用的光标类型 EditMode属性:返回RecordSet对象当前的编辑模式 BOF属性:若指针位于最后一条记录之后,返回TRUE、否则返回FALSE。 Filter属性:从RecordSet对象中筛选记录。 LockType属性:指定编辑过程中对记录的锁定类型。 MaxRecords属性:可以返回的最多记录条数。 PageCount属性:返回RecordSet对象的分页总数。 PageSize属性:RecordSet对象设有分页时,设置分页的记录条数。 RecordCount属性:返回RecordSet对象中记录条数。 source属性:设置用来建立RecordSet对象的SQL来源。 State属性:返回RecordSet对象的状态:1(adStateOpen)表示打开;2(adStateClosed)表示关闭。 Status属性:返回对记录的处理是否成功:1(adStatusOK)表示成功; 2(adStatueErrorsOccurred)表示产生错误。 方法: AddNew方法:为可更新的RecordSet对象创建一个新记录。 CancelBatch方法:取消批次更新。 CancelUpdate方法:取消对当前的RecordSet对象中某一个记录的任何改变,但必须在使用Update之前。 Clone方法:复制一个已存在的RecordSet对象。 Delete方法:删除RecordSet对象中当前一条记录。 MoveFirst方法:将当前指针移到RecordSet对象中的第一条记录。 MoveLast方法:将当前指针移到RecordSet对象中的最后一条记录。 MoveNext方法:将当前指针移到RecordSet对象中的当前记录的下一条记录。MovePrevious方法:将当前指针移到RecordSet对象中的当前记录的上一条记录。 Move n方法:将当前指针移到RecordSet对象中的当前指针到第n条记录。 Open方法:打开一个RecordSet对象。 Update方法:保存对当前RecordSet对象中记录的更新。 GetRows方法:从当前记录开始取出n条记录并存于一个二维数组中。 循环得到一条记录的所有值

asp中各种数据库连接代码

asp中各种数据库连接代码 access数据库连接 用dsn连接并且没有用户名和密码: <% set conn=server.createobject("adodb.connection") conn.open"yourdsnname" %> 用dsn连接并且有用户名和密码: <% set conn=server.createobject("adodb.connection") conn.open"yourdsnname","username","password" %> 用实际的数据库绝对路径连接: <% set conn=server.createobject("adodb.connection") strconn="driver=;" strconn=strconn&"dbq=e:\yanhang\database.mdb" conn.open strconn %> 用实际的数据库相对路径连接: <% set conn=server.createobject("adodb.connection") strconn="driver=;" strconn=strconn&"dbq="&server.mappath("/database/yanhang.mdb") conn.open strconn %> 一 "Provider=Microsoft.Jet.OLEDB.4.0;Data Source="& Server.MapPath("/bhpbook.mdb") 1、要使用测试服务器上的驱动程序,DW里才能显示正确连接 2、必须在数据库路径前加”/” 二 "Driver={Microsoft Access Driver (*.mdb)};DBQ=路径\bhpbook.mdb" 1、路径可以是绝对或相对路径 2、要使用(本)应用服务器上的驱动程序 三 "Driver={Microsoft Access Driver (*.mdb)};DBQ="& Server.MapPath("/bhpbook.mdb") 1、要使用测试服务器上的驱动程序,DW里才能显示正确连接 2、必须在数据库路径前加”/” ms sql server数据库连接 用dsn连接: <% set conn=server.createobject("adodb.connection") conn.open"dsn=mydsn;uid=user;pwd=password;database=databasename" %> 不用dsn连接: <% set conn=server.createobject("adodb.connection") dsntemp="driver=;server=servername;uid=user;pwd=password;database=databasename" conn.open dsntemp

ASP网站源代码修改方法

ASP网站源代码修改方法 ASP网站源代码修改方法 摘要:一、怎么样去除默认的管理员(joekoe)先用joekoe这个管理员进入后台,找到一个配置管理asp源代码,点基本信息配置,可以修改超级管理员,就是现在的joekoe点用户管理里的某一用户asp.n... 一、怎么样去除默认的管理员(joekoe) 先用joekoe这个管理员进入后台,找到一个配置管理asp源代码, 点基本信息配置,可以修改超级管理员,就是现在的joekoe 点用户管理里的某一用户https://www.doczj.com/doc/882269768.html,,可以进行类型修改,可改成管理员。 当你添加了别的管理员后,就可以点权限管理,再点某一管理员,就可以设置他的权限了,只要选中就行了。点击确定。 二、如何添加新的菜单和新的页面 添加新的菜单的格式如下:abc:新的菜单 那么新建个.asp文件:abc.asp 文件内容可以有两种形式: 第一种是直接转到你的别的程序或网址上asp是什么,如下: <%response.redirect "你以的文件名或网址"%> 第二种是按现在的网站结构生成类似的页面asp源码,如下: <!-- #include&nbspfile="include/config_other.asp"&nbsp--> <!-- #include&nbspfile="include/conn.asp"&nbsp--> <% tit="新的菜单" call&nbspweb_head(0,1asp代码,0asp空间,https://www.doczj.com/doc/882269768.html,教程,0) '------------------------------------left---------------------------------- call&nbspformat_login() '----------------------------------left&nbspend-------------------------------- call&nbspweb_center(0) '-----------------------------------center--------------------------------- response.write&nbspukong %> '以下是页面的内容 '可以添加一个系统表格(可随颜色等一起改变) <%&nbspresponse.write&nbspkong&table1 %> <tr<%response.write&nbsptable2%>><td> <%response.write&nbspimg_small("fk0") %> <font class=end><b>表格标题</b></font></td></tr>

ASP中使用SQL语句(总集)

ASP中使用SQL语句(总集) [ 2003年4月12日,阅读人数160人] 五花八门的SQL产品多得要命,或许你早顾不得其它甩开袖子就动手干了。但你要同时采用ASP和SQL的话就可能会头晕。MySQL、SQL Server和mSQL都是绝佳的SQL工具,可惜,在ASP的环境下你却用不着它们来创建实用的SQL 语句。不过,你可以利用自己掌握的Access知识以及相应的Access技能,再加上我们的提示和技巧,相信一定能成功地在你的ASP网页中加入SQL。 在SQL的世界里,最最基础的操作就是SELECT 语句了。在数据库工具下直接采用SQL的时候很多人都会熟悉下面的操作: SELECT what FROM whichTable WHERE criteria 执行以上语句就会创建一个存放其结果的查询。 而在ASP页面文件上,你也可以采用以上的一般语法,不过情况稍微不同,ASP编程的时候,SELECT 语句的内容要作为字符串赋给一个变量: SQL = "SELECT what FROM whichTable WHERE criteria" 好了,明白了ASP下SQL“说话”的方式,接下来如法炮制即可,只要满足你的需要,传统的SQL查询模式和条件查询都能派用场。 举例说明,不妨假设你的数据库内有个数据表,名字是Products ,现在你想取出这个表里的全部记录。然后你就编写了下面的代码: SQL ="SELECT * FROM Products" 以上代码——SQL语句的作用就是取出表内的全部数据——执行后将会选出数据表内的全部记录。不过,要是只想从表

内取出某个特定列,比如p_name。那就不能用 * 通配符了,这里得键入具体某列的名字,代码如下: SQL ="SELECT p_name FROM Products" 执行以上查询之后Products 表内、p_name 列的内容就会全被选取出来。 有的时候取出全部数据库记录也许正好满足你的要求,不过,在大多数情况下我们通常只需得到部分记录。这样一来该如何设计查询呢?当然会更费点脑筋了,何况本文也存心不想让你去用那个什么劳什子的recordset。 举个例子,假如你只打算取出p_name 记录,而且这些记录的名字必须以字母w打头,那么你就要用到下面的WHERE 子句了: SQL ="SELECT p_name FROM Products WHERE p_name LIKE 'W%'" WHERE 关键词的后面跟着用来过滤数据的条件,有了这些条件的帮助,只有满足一定标准的数据才会被查询出来。在以上的例子里,查询的结果只会得到名字以w 打头的p_name 记录。 以上例子中,百分比符号(%)的含义是指示查询返回所有w 字母打头而且后面是任何数据甚至没有数据的记录条目。所以,在执行以上查询的时候, west 和 willow 就会从Products 表内被选取出来并存放在查询里。 就像你看到的那样,只要仔细地设计SELECT 语句,你就可以限制recordset 中返回的信息量,多琢磨琢磨总能满足你的要求。 这些啊还不过是掌握SQL用途刚起步。为了帮助你逐步掌握复杂的SELECT 语句用法,下面就让我们再来看一下关键的标准术语:比较运算符,这些玩意都是你在构筑自己的SELECT 字符串来获得特定数据时要经常用到的。 WHERE子句基础 在开始创建WHERE 子句的时候,最简单的方式是采用标准的比较符号,它们是 < 、 <= 、 > 、 >= 、<> 和 =。显然,你很快就能明白以下代码的含义和具体运行结果: SELECT * FROM Products WHERE p_price >= 199.95 SELECT * FROM Products WHERE p_price <> 19.95 SELECT * FROM Products WHERE p_version = '4' 注意:这里你会注意到,最后一个例句中的数字4周围加了单引号。原因是这样的,在这个例子中的 '4' 是文本类型

文本预览
相关文档 最新文档