13.1
ADO概述
ADO提供了訪(fǎng)問(wèn)各種數據庫的連接機制,是目前流行的數據庫連接方法之一。使用ADO提供的訪(fǎng)問(wèn)數據庫統一接口,用戶(hù)可以讀取和寫(xiě)入幾乎所有的數據庫管理系統,包括Microsoft
SQL Server、Oracle和Microsoft Access等,也可以訪(fǎng)問(wèn)Microsoft
Excel的數據文件。
ADO是一個(gè)COM組件,任何COM技術(shù)的編程語(yǔ)言都可以使用,包括Microsoft Vis l Basic、Microsoft Vis
l
C++、Delphi,以及ASP。ASP腳本通過(guò)ADO技術(shù)執行SQL指令,對數據庫記錄執行添加、更新和刪除操作,可以說(shuō)ADO是適合Web數據庫應用的最佳選擇。
13.1.1 ADO對象
ADO提供了一系列的對象、屬性和方法,用其可以輕松完成數據庫的連接,以及數據的查詢(xún)、添加、修改和刪除等各種操作。在A(yíng)SP中ADO由ADODB對象庫中的子對象組成。ADO的常用對象如表13-1所示。
表13-1 ADO的常用對象
對象
Connection
Recordset
Command
Field
Parameter
Property
Error
ADO集合如表13-2所示
表13-2 ADO集合
對象
Fields
Parameters
Properties
Errors
13.1.2 使用ADO的步驟
在A(yíng)SP中使用ADO操作數據庫的步驟如下:
連接數據源。
設置訪(fǎng)問(wèn)數據庫源的命令,一般為SQL語(yǔ)句
執行命令。
如果命令按行返回數據,則將數據存儲在緩存中;如果使用SELECT語(yǔ)句,則保存在Recordset對象中。
修改緩存中的數據。
檢測出現的錯誤。
結束連接
1、連接數據源
操作數據庫前,必須首先建立與該數據庫的連接,成功的連接才可以使應用程序訪(fǎng)問(wèn)數據源。Command、Recordset及Field等對象操作數據庫時(shí)都必須依賴(lài)連接,Connection對象可以實(shí)現連接數據源操作,其常用屬性如表13-3所示
表13-3 Connection對象的常用屬性
屬性
ConnectionString
ConnectionTimeout
Mode
DefaultDatabase
Provider
Version
Cursorlocation
Connection對象的常用方法如表13-4所示。
表13-4
Connection對象的常用方法
方法
Open
Close
Execute
2、設置訪(fǎng)問(wèn)數據源的命令
訪(fǎng)問(wèn)數據源即可以直接使用SQL語(yǔ)句,也可以通過(guò)設置Command對象的屬性實(shí)現。Command對象具有強大的數據庫訪(fǎng)問(wèn)能力,通過(guò)它可以輕松地完成數據庫的各種操作。該對象的常用屬性如表13-5所示。
表13-5
Command對象的常用屬性
屬性
ActiveConnection
CommandText
CommandTimeout
CommandType
State
Command對象的常用方法如表13-6所示
表13-6 Command對象的常用方法
方法
Cancel
Execute
3、獲取數據
Recordset對象可以從執行的命令中返回數據集,它也是ADO普遍使用的一個(gè)對象。該對象可以存放命令返回的結果,并可以對記錄執行增加、刪除和排序等操作,其常用屬性如表13-7所示。
13-7 Recordset對象的常用屬性
屬性
RecordCount
AbsolutePage
BOF
EOF
PageCount
PageSize
RecordCount
LockType
CursorType
LockType屬性的常用值如表13-8所示
表13-8 LockType屬性的常用值
方法
adLockReadOnly
adLockPessimistic
adLockOptimistic
adLockBatchOptimistic
CursorType屬性的常用值如表13-9所示
表13-9 CursorType屬性的常用值
方法
AdOpenForwardOnly
AdOpenKeyset
AdOpenDynamic
AdOpenStatic
Recordset對象的常用方法如表13-10所示。
表13-10 Recordset對象的常用方法
方法
MoveFirst
MoveLast
MovePrevious
MoveNext
AddNew
Delete
Save
Update
4、檢測出現的錯誤
使用ADO操作數據庫時(shí)可能會(huì )出現錯誤,出現錯誤后會(huì )有一個(gè)或者多個(gè)Error對象入Connection對象的Error集合中。通過(guò)Error對象可以獲取每個(gè)錯誤的信息,該對象的屬性如表13-11所示。
表13-11
Error對象的屬性
屬性
Description
Number
Source
adLockBatchOptimistic
13.2 Connection對象
ASP程序在操作數據庫時(shí),需要建立與數據庫的連接。ADO提供的Connection對象用于建立與數據庫的連接,其屬性和方法可以打開(kāi)和關(guān)閉與數據庫連接。在A(yíng)SP中,ADO連接數據庫的常用方法有以下三種:
13.2.1 使用OLE DB連接數據庫
用OLE DB可以連接SQL Server、Microsoft
Access及Excel等數據源,下面是連接不同數據庫的方法。
1、建立與Access數據庫的連接
下面的代碼使用OLE DB連接Access數據庫user.mdb:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'獲取要連接的數據庫的物理路徑
path=Server.MapPath("/user.mdb")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open
%>
代碼說(shuō)明如下:
Provider:OLE DB提供者的名字,如“Microsoft.Jet.OLEDB.4.0”
Data Source:指定數據源的名稱(chēng),如“d:\text\13\user.mdb”.
UserID:連接數據源時(shí)所用的用戶(hù)名稱(chēng)
PassWord:連接數據庫時(shí)用戶(hù)的密碼。
上面的形成也可以修改成下面的代碼:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'獲取要連接的數據庫的物理路徑
path=Server.MapPath("/user.mdb")
'依據連接的數據庫設置連接字符串
Conn.Open "Provider=Microsoft.Jet.OLEDB.4.0;","Data
Source="&path
%>
Open方法的語(yǔ)法格式如下:
connection.Open ConnectinString,UserID,Password,Option
語(yǔ)法格式說(shuō)明如下:
ConnectionString:可選項,指定連接信息的字符串,其中包含由分號隔開(kāi)的一系列語(yǔ)句。這些語(yǔ)句設置連接的屬性,如“Provider=Microsoft.Jet.LEDB.4.0”
UserID:可選項,指定連接數據庫所用的用戶(hù)名,此處指定的UserID將覆蓋Connectionstring字符串中指定的UserID。
Password:可選項,指定連接數據庫所用的密碼,此處指定的Password將覆蓋ConnectionString字符串中指定的Password。
Options:可選項,指定建立連接的方式,常用常量值如表13-12所示。
表13-12
Options的常用常量值
常量
adConnectUnspecifield
adAsyncConnect
2、建立與SQL Server數據庫的連接
下列使用OLE DB連接SQL Server數據庫:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=SQLOLEDB;DataSource=ServerName;Initial
Catalog=DataBaseName;UserID=UserName;password=PWD;"
Conn.Open
%>
代碼說(shuō)明如下:
連接SQL Server時(shí),OLE DB的提供者名為“SQLOLEDB”
DataSource:SQL Server服務(wù)器名
Initial Catalog:數據庫名
UserID:可選項,指定連接數據庫所用的用戶(hù)名
Password:可選項,指定連接數據庫所用的密碼。
13.2.2 使用ODBC連接
1、建立與Access數據庫的連接
下面是使用ODBC連接Access數據庫的代碼:
<%
'創(chuàng )建ADODB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="DRIVE={Microsoft.Access.Driver(*.mdb)}"&_
Conn.Open
%>
代碼說(shuō)明如下:
DRIVER:指定ODBC所用的驅動(dòng)程序,如連接Access數據庫所用的驅動(dòng)程序為“Microsoft.Access.Driver(*.mdb)”。
DBQ:指定Access數據庫的物理路徑。
2、建立與SQL Server數據庫的連接
下面是使用ODBC連接SQL Server數據庫的代碼:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString='"DRIVER=(SQLServer);Server=ServerName;"&_
Conn.Open
%>
代碼說(shuō)明如下:
連接SQL Server時(shí),OLE DB的提供者名為“SQLOLEDB”。
Server:SQL Server服務(wù)器名。
Database:數據庫名
UID:可選項,指定連接數據庫所用的用戶(hù)名。
PWD:可選項,指定連接數據庫所用的密碼。
3、建立與Excel的連接
在網(wǎng)站設計時(shí)有時(shí)需要獲取Excel數據源中數據,ADO連接Excel文件的方法如下:
<%
Set ExcelConn=Server.CreaeObject("ADODB.Connection")
ExcelFile=Server.mappath("text.xls")
'依據連接的數據庫設置連接字符串
ExcelDriver="Driver={Microsoft Excel
Driver(*.xls)};DBQ&ExeclFile
ExcelConn.Open ExcelDriver
%>
代碼說(shuō)明如下:
DRIVER:連接Excel文件所用的驅動(dòng)程序
DBQ:指定Excel文件的物理路徑。
13.2.3 使用DSN連接數據庫
用戶(hù)DSN:只有建立該DSN的用戶(hù)才能訪(fǎng)問(wèn)該數據源,并且只能在本計算機上使用,不能從網(wǎng)絡(luò )上訪(fǎng)問(wèn)該數據源。
系統DSN: 可以被該計算機上的所有有權限的用戶(hù)訪(fǎng)問(wèn)。
文件DSN:與系統DSN相似,但是可以從網(wǎng)絡(luò )上訪(fǎng)問(wèn)該數據源。
DSN可以由控制面板中的數據源創(chuàng )建、修改并刪除,本節將介紹建立Microsoft Access和SQL
Server的DSN的方法。
1、建立Access數據庫的DSN
步驟1在Windows 2000
Server操作系統中,單擊“開(kāi)始”|“程序”|“管理工具”|“數據源ODBC”命令,彈出“ODBC數據源管理器”對話(huà)框,如圖13-1所示。也可以打開(kāi)“控制面板”窗口,雙擊“管理工具”|“數據源ODBC”圖標,打開(kāi)該對話(huà)框。
步驟2:?jiǎn)螕簟跋到yDSN”標簽,打開(kāi)“系統DNS”選項卡,如圖13-2所示。
步驟3:?jiǎn)螕簟疤砑印卑粹o,彈出“創(chuàng )建數據源”對話(huà)框,如圖13-3所示。
步驟4:選擇“Microsoft Access Driver(*.mdb)”選項,單擊“完成”按鈕彈出“ODBC Microsoft
Access安裝”對話(huà)框,如圖13-4所示。
步驟5:輸入數據源名,單擊“選擇”按鈕彈出“選擇數據庫”對話(huà)框,如圖13-5所示。
步驟6:在“數據庫名”下拉列表框中選擇數據庫,單擊“確定”按鈕建立DNS如圖13-6所示。
2、建立SQL Server數據庫的DSN
建立SQL
Server數據庫的DSN方法基本類(lèi)似,操作步驟如下:
步驟3:若選擇“使用網(wǎng)絡(luò )登錄ID的Windows
NT驗證”單選按鈕,將以當前登陸Windwos NT的用戶(hù)登錄SQL Server數據庫;若選擇“使用用戶(hù)輸入登錄ID和密碼的SQL
Server驗證”單選按鈕,將以SQL Server的用戶(hù)登錄SQL Server數據庫。本例選擇“使用用戶(hù)輸入登錄ID和密碼的SQL
Server驗證”單選按鈕,輸入SQL Server的用戶(hù)sa和密碼。單擊“下一步”按鈕,彈出訪(fǎng)問(wèn)數據庫設置對話(huà)框。
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="DSN=Test;UID=sa;PWD=; "
Conn.Open
%>
代碼說(shuō)明如下:
DSN:DSN的名稱(chēng)
UID:用戶(hù)名。
PWD:密碼。
13.3 Recordset對象
13.3.1
建立Recordset對象
在使用Recordset對象前,需要創(chuàng )建該對象,語(yǔ)法格式如下:
Set Rs=Server.CreateObject(“ADODB.Recordset”)
讀取表中所有記錄示例的實(shí)現如下:
1、連接數據庫
下面是連接數據庫的代碼:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open '打開(kāi)與數據庫的連接
%>
2、建立Recordset對象并獲取所有記錄
下面的代碼建立Recordset對象并使用Open()方法獲取指定表記錄。
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open
"Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
%>
代碼說(shuō)明如下:
本段代碼使用Open()方法獲取Group_Info表中的所有記錄。
Open()方法獲取表中的所有記錄或查詢(xún)的記錄,其語(yǔ)法格式如下:
rs.Open DataSource,Conn,CursorType,LockType,Options
語(yǔ)法格式說(shuō)明如下。
Rs:
DataSource:
Conn:
CursorType:
LockType:
Options:
3、輸出記錄
可以使用下面的方式獲取記錄指定的字段內容:
rs(Name)
其中rs為Recordset對象實(shí)例,Name為字段的名稱(chēng),rs(Name)為當前記錄的Name字段的內容。
輸出所有記錄內容會(huì )用到Recordset對象的EOF或者BOF屬性,EOF屬性標識記錄指針是否移動(dòng)到最后一條記錄之后,即訪(fǎng)問(wèn)是否結束;BOF屬性用來(lái)標識記錄指針是否移動(dòng)到首條記錄之前。
下例使用Recordset對象輸出所有記錄的內容:
<%
If not rs.EOF then
Do while not rs.Eof
Loop
Else
Response.write "沒(méi)有記錄!"
End If
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
4、包含adovbs.inc文件
adovbs.inc文件存放在系統盤(pán)中的Program Files\Common
Files\System\ado目錄下,將該文件復制到指定的目錄下即可引用。本例將該文件復制到當前目錄下,使用下面的方式引用:
<!--# incl?
file=”adovbs.inc”-->
13.3.2
分頁(yè)顯示記錄
1、使用RecordCount屬性實(shí)現分頁(yè)顯示
下例使用RecordCount屬性實(shí)現分頁(yè)顯示。
(1)連接數據庫,下面是連接的數據庫代碼:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open '打開(kāi)與數據庫的連接
%>
(2)建立Recordset對象并獲取所有記錄,下面的代碼建立Recordset對象并使用Open()方法獲取所有的記錄:
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open
"Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
%>
(3)設置分頁(yè)參數,分頁(yè)時(shí)需要獲取記錄總數。設置每頁(yè)顯示的記錄數目,總頁(yè)數和當前頁(yè)數和代碼的如下:
<%
Dim rsCount 存儲記錄總的數目
‘獲取所有的記錄數目并賦給變量reCount
rsCount=rs.RecordCount
‘變量Page存儲總的頁(yè)數,PageSize為每頁(yè)顯示的記錄數目
Dim Page,PageSize
Dim n ‘用來(lái)存儲查詢(xún)過(guò)的記錄數
n=0
‘設置每頁(yè)的記錄數目為2
PageSize=2
‘計算總的頁(yè)數
Page=rsCount/PageSize
‘獲取當前的頁(yè)數
PageNo=Trim(Reqst.QryString("Page"))
‘如果用戶(hù)指定的頁(yè)號為空,則使該頁(yè)的數值為第1頁(yè)
If PageNo="" Then PageNo=1
‘把頁(yè)號轉化成數值,如果不是數值,將出錯
PageNo=Cint(PageNo)
‘如果該值小于1,則使該值為1;如果為總頁(yè)數,則設置該值為總頁(yè)數
If PageNo<1 Then PageNo=1
If PageNo>Page Then PageNo=Page
%>
(4)顯示記錄,顯示指定頁(yè)的記錄要使記錄指針移動(dòng)到指定頁(yè)。本例創(chuàng )建一個(gè)計數器n,用于判斷記錄指針是否移動(dòng)到指定頁(yè)中的記錄。下面的代碼使記錄指針移動(dòng)到指定頁(yè)。但是這種方法效率不高,在14.5節中介紹了另一種分頁(yè)辦法,讀者可以參考:
<%
‘讀取所有的記錄
Do while not rs.Eof
‘判斷當前記錄是否是指定頁(yè)內的記錄,是,則輸出
If n>PageNo*PageSize and
n<=PageSize*(PageNo+1) Then
End If
n=n+1
rs.MoveNext
Loop
%>
(5)顯示分頁(yè),下面的代碼顯示頁(yè)號連接,以方便用戶(hù)查詢(xún):
<%
‘顯示所有的分頁(yè)連接
For i=1 to Page
Response.write "<a
href='13.3.2.asp?Page="&i&"'>第"&i&"頁(yè)</a>
"
Next
%>
(6)關(guān)閉連接,代碼如下:
<%
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
2、使用AbsolutePage分頁(yè)
上例需要程序員設置和計算頁(yè)數,相對麻煩。Recordset對象提供了實(shí)現分頁(yè)的屬性,這樣屬性是AbsolutePage、PageCount和PageSize。下面是使用這幾個(gè)屬性實(shí)現分頁(yè)的示例。
(1)連接數據庫,代碼如下:
<%
'創(chuàng )建ADO DB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open '打開(kāi)與數據庫的連接
%>
(2)建立Recordset對象并獲取所有記錄,下面的代碼建立Recordset對象并使用Open()方法獲取所有的記錄。
<%
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open
"Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
%>
(3)設置分頁(yè)參數,代碼如下:
<%
‘設置每頁(yè)顯示記錄的數目
rs.PageSize=2
Dim
page
page=rs.PageCount
PageNo=Trim(Reqst.QryString("Page"))
If PageNo="" Then PageNo=1
‘把指定頁(yè)的頁(yè)碼轉換成整數
PageNo=Cint(PageNo)
‘如果小于1,則設置該頁(yè)碼為1.
If PageNo<1 Then PageNo=1
‘如果指定頁(yè)的頁(yè)碼大于總頁(yè)數,則設置該頁(yè)碼為總頁(yè)數
If PageNo>Page Then PageNo=Page
‘設置當前頁(yè)為指定頁(yè)的頁(yè)碼
rs.AbsolutePage=PageNo
%>
代碼說(shuō)明如下:
PageSize屬性:每頁(yè)的記錄條數
PageCount屬性:表示Recordset對象的分頁(yè)總數。
AbsolutePage屬性:獲取或設置當前頁(yè)的頁(yè)碼。
(4)顯示當前頁(yè)記錄,代碼如下:
<%
‘顯示當前頁(yè)記錄,代碼如下:
For i=1 To rs.PageSize
If rs.EOF then exit for
Response.write "<font
color='#FF0000'>職位:</font>"&rs("Name")&_
rs.movenext
next
%>
(5)顯示頁(yè)號,代碼如下:
<%
For i=1 to Page
Response.write "<a
href='13.3.2.asp?Page="&i&"'>第"&i&"頁(yè)</a>
"
Next
%>
(6)關(guān)閉連接,代碼如下:
<%
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
13.3.3 添加和刪除記錄
Recordset對象屬的屬性和方法也可以添加和刪除記錄,Addnew()方法添加記錄,Delete()方法刪除記錄。下例使用這兩個(gè)方法添加和刪除記錄。
1、界面
界面中提供了一個(gè)表單,其中包括兩個(gè)文本框和一個(gè)“提交”按鈕。該例顯示所有的記錄,每個(gè)記錄都有“刪除”鏈接,添加記錄時(shí),數據提交到Insert.asp文件處理,刪除記錄由文件delete.asp實(shí)現。界面的實(shí)現代碼如下:
<!--#incl? file="adovbs.inc"-->
<html>
<head>
<meta http-equiv="Content-Lang ge"
content="zh-cn">
<meta http-equiv="Content-Type" content="text/html;
charset=gb2312">
<title>新建網(wǎng)頁(yè)
1</title>
</head>
<body>
<table
><tr><td>
<form method="POST"
action="insert.asp">
<p>職位名稱(chēng):<input
type="text" name="MingCheng"
size="20"></p>
<p>職位描述:<input
type="text" name="XinXi"
size="20"></p>
<p><input type="s mit"
val="提交" name="B1"><input
type="reset" val="重置"
name="B2"></p>
</form>
<%
'創(chuàng )建ADODB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open '打開(kāi)與數據庫的連接
Set rs=Server.CreateObject("ADODB.Recordset")
rs.Open
"Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
Do While not rs.EOF
Response.write rs("Name")&" <a
href='delete.asp?id="&rs("ID")&"'>刪除</a><BR>"
rs.movenext
Loop
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
</td></tr></table>
</body>
</html>
2、添加記錄
下面的代碼獲取的記錄信息添加到表中:
<!--#incl? file="adovbs.inc"-->
<%
'創(chuàng )建ADODB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open '打開(kāi)與數據庫的連接
Set rs=Server.CreateObject("ADODB.Recordset")
'打開(kāi)指定的表
rs.Open
"Group_Info",Conn,adOpenKeyset,adLockOptimistic,adCmdTable
'獲取添加記錄的信息
Name=Reqst.Form("MingCheng")
Info=Reqst.Form("XinXi")
Response.write Name&Info
'使用Addnew方法添加一條記錄
rs.AddNew Array("name","Info"),Array(Name,Info)
rs.Update
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
代碼說(shuō)明如下:
AddNew()方法在數據庫中添加記錄,其語(yǔ)法格式如下:
Rs.AddNew Field,Vals
其中,Field是可選項,可以為記錄字段的名稱(chēng)或一組記錄的名稱(chēng);Val也是可選項,為新記錄中的字段值或者一組字段的值。
AddNew()方法添加記錄后需要使用Update()方法更新記錄后才能添加成功。
Update()方法用來(lái)保存在數據庫中添加的記錄,其語(yǔ)法格式如下:
Rs.Update Field,Val
其中Field是可選項,可以為記錄字段的名稱(chēng)或一組記錄的名稱(chēng);Vals也是可選項,為新記錄中的字段值或者一組字段的值。
3、刪除記錄
下面是刪除用戶(hù)指定記錄的代碼:
<!--#incl? file="adovbs.inc"-->
<%
'創(chuàng )建ADODB.Connection對象
Set Conn=Server.Createobject("Adodb.Connection")
'依據連接的數據庫設置連接字符串
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open '打開(kāi)與數據庫的連接
Set rs=Server.CreateObject("ADODB.Recordset")
'獲取用戶(hù)指定的記錄序號
ID1=Reqst.Qry("ID")
Dim Sql
'設置查詢(xún)該記錄的SQL語(yǔ)句
sql="SELECT * FROM [Group_Info] WHERE
[ID]="&ID1
'查詢(xún)記錄
rs.Open sql.,Conn,adOpenKeyset,,adCmdTable
rs.Delete
rs.Update
rs.close
Set rs=Nothing
Conn.Close
Set Conn=Nothing
%>
記錄主要使用Delete()方法實(shí)現,其語(yǔ)法格式如下:
Rs.Delete AffectRecords
其中Rs為Recordset對象實(shí)例,AffectRecords參數指定操作所影響的記錄數目,常用的常量值如表13-13所示。
表13-13
AfferRecords參數的常用常量值
常量
AdAffectCurrent
AdAffectGroup
adAffectAll
adAffectAllChapters
13.3.4 跳轉到指定記錄
Recordset對象提供的方法和屬性既可以實(shí)現分頁(yè)顯示的功能,也可以實(shí)現跳轉頁(yè)面的功能。下例跳轉到指定記錄或第1條和最后一條目錄,其界面如圖13-17所示。
該例的實(shí)現流程如下:
(1)連接數據庫。
(2)獲取操作類(lèi)型。
(3)查詢(xún)數據庫中的表。
(4)依據操作類(lèi)型設置記錄指針。
(5)判斷指針是否到尾記錄,是,則轉(7).
(6)顯示記錄信息
(7)結束。
1、連接數據庫
代碼如下:
<%
Set Conn=Server.Createobject("Adodb.Connection")
Conn.ConnectionString="Provider=Microsoft.Jet.OLEDB.4.0;"&_
Conn.Open
%>
2、獲取操作類(lèi)型
在本例中,變量action標識操作類(lèi)型。Action值為“First”,表示將記錄指針移動(dòng)到首記錄:為“Last”,表示將記錄指針移動(dòng)到尾記錄;為“1”,表示將記錄向前,或向后移動(dòng)指定數目的指針,獲取操作類(lèi)型的代碼如下:
<%
action=Trim(Reqst,QryString("action"))
%>
查詢(xún)表的代碼如下:
<%
sql="select * from
Goods"
Set
rs=Conn.Exectute(sql)
%>
依據操作類(lèi)型顯示記錄的代碼如下:
<%
'下面輸出所有的記錄,使用recordset對象的屬性判斷記錄訪(fǎng)問(wèn)是否結束
Do while not rs.Eof
If action="First" Then
'將記錄指針移動(dòng)到首記錄
rs.MoveFirst
'將action賦值為空,否則會(huì )每次死循環(huán)狀態(tài)
action="";
ElseIf action=“Last” then
ElseIf IsNumeric(action) Then
else
End If
If not rs.EOF Then Response.write
rs("Name")&"<BR>"
Loop
%>
代碼說(shuō)明如下:
該段代碼使用了Recordset對象的MoveFirst()、MoveLast()、MoveNext()和Move()方法移動(dòng)記錄指針。
MoveFirst()方法把Recordset對象的記錄指針移動(dòng)到第1條記錄。使用該方法時(shí),CursorType屬性只能為adOpenForwardOnly,其語(yǔ)法格式如下:
Rs.MoveFirst
其中rs為Recordset對象實(shí)例。
MoveLast()方法把Recordset對象的記錄指針移動(dòng)到最后一條記錄。如果Recordset對象不支持書(shū)簽功能,執行時(shí)會(huì )出現錯誤。其語(yǔ)法格式如下:
Rs.MoveLast
MoveNext()方法把Recordset對象的記錄指針移動(dòng)到下一條記錄。
Move()方法把記錄指針向前或者向后移動(dòng)指定的數目。
使用Recordset對象的EOF屬性判斷訪(fǎng)問(wèn)是否結束。Recordset對象還有一個(gè)類(lèi)似屬性BOF,該屬性用來(lái)標識記錄指針是否移動(dòng)到首條記錄之前。
3、交互界面
交互界面包含兩個(gè)鏈接,一個(gè)文本框和兩個(gè)按鈕,實(shí)現代碼如下:
<a
href="13.3.5.asp?action=First">首記錄</a> <a
href="13.3.5.asp?action=Last">尾記錄</a>
<p><input type="text"
name="T1" size="20">
<input type="s mit" val="提交"
name="B1">
<input type="reset" val="重置"
name="B2"></p>
聯(lián)系客服