ASP連接讀寫ACCESS數據庫實例(轉)


(一)   數據庫的選擇:

有許多的數據庫你可以選擇,SQL SERVER、ACCESS(*.mdb)、EXCEL(*.xls)、FOXPRO(*.dbf)甚至普通的文本文件(*.txt)都可以達到存儲數據的功能。那么到底選擇什么數據庫最合適呢?其中SQLSERVER是服務器級的,足以應付每天上萬次的訪問量。對於非服務器級的數據庫建議使用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:

源代碼如下:

<html>
<head>
<title>添加數據庫記錄</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#FFFFFF">
<p align="center"><font size="5">添加數據庫記錄</font></p>
<form method="post" action="adddatabase.asp">
<div align="center">
<table width="46%" border="0">
<tr>
<td width="28%">
<div align="right">公司名稱: </div>
</td>
<td width="72%">
<input type="text" name="CompanyName">
</td>
</tr>
<tr>
<td width="28%">
<div align="right">聯絡人姓名: </div>
</td>
<td width="72%">
<input type="text" name="CName">
</td>
</tr>
<tr>
<td width="28%">
<div align="right">所在城市: </div>
</td>
<td width="72%">
<input type="text" name="City">
</td>
</tr>
<tr>
<td width="28%">
<div align="right">電話號碼:</div>
</td>
<td width="72%">
<input type="text" name="Tel">
</td>
</tr>
<tr>
<td width="28%">
<div align="right"> </div>
</td>
<td width="72%">
<input type="submit" name="Submit" value="Submit">
<input type="reset" name="reset" value="Reset">
</td>
</tr>
</table>
</div>
</form>
</body>
</html>

這與普通的HTML沒有任何區別,關鍵部分已經用紅色標記了。遞交方法用POST,遞交后處理的程序是adddatabase.asp(下一步就重點討論它)。

(3)關鍵部分:建立與數據庫的聯系並將表單中收集到的信息添加到ACCESS數據庫中。

ASP代碼放在〈%和%>之間。

adddatabase.asp程序內容:

<%
CompanyName =Request("CompanyName")
CName =Request("CName")
City =Request("City")
Tel = Request("Tel")
%>
    以上,首先取得表單中填寫的數據,使用ASP的Request對象非常容易可以實現數據的收集。雙引號中的就是上個文件中建立的各個輸入框中的名字紅色部分(NAME=)。所以今后為每個輸入框起名字是個好習慣,盡管有時候並不一定用得到。這樣取得的數據就保存在等號坐側的變量中了。

If CompanyName ="" Or CName = "" Or City = "" Or Tel ="" Then
Response.Write"<html><body><center><font size=5>請將資料填寫完整。</font></center></body></html>"
'Response.Redirect"error.htm"
Response.End
End If

這里是檢測各個項目是否輸入了東西,如果為空則不往下繼續執行,顯示錯誤信息。注意:你可以使用兩種方法。我都列出了。
方法一:使用Response.Write方法寫一個出錯頁面,類似於Java scripts的document.write寫法,只是ASP使用Response.write罷了。
方法二:使用Response.Redirect方法導向出錯頁面error.htm。我在方法一的代碼前加上單引號表示注釋。('ASP中表示注釋用單引號')。

<%
setdbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath =Server.MapPath("customer.mdb")
dbconnection.Open"driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath
%>

程序解釋:
(1)建立Connection對象:dbconnection,建立一個連接(Connection)是數據庫存取的開始。我們使用ASP的內建對象方法Server.Createobject建立與數據庫的連接。ADODB是ASP的數據庫存取組件,不必擔心只要有ASP就有它了,是內置的。
(2)使用dbconnection.open方法打開數據庫customer.mdb。driver參數語法: driver={Microsoft Access Driver (*.mdb)}必須這么寫。告訴系統使用ACCESS ODBC驅動處理。dbq參數用來指定打開的數據庫文件,它必須是完整的路徑。例如"c:\inetpub\wwwroot\customer\customer.mdb",我們使用Server.MapPath的方法取得數據庫的完整路徑。  

<%
Set rs =Server.CreateObject("ADODB.Recordset")
%>

建立Recordset對象rs。Connection僅僅是建立了與數據庫間的連接,要存取數據還應該再建立Recordset對象。

rs.Open "客戶", dbconnection,adOpenDynamic, 3

打開數據庫中的表"客戶"(客戶是表名)。 語法:

rs.open 數據表名或SQL指令,已經建立的Connection對象(這里是dbconnection), 鎖定類型

<%
rs.AddNew
rs("公司名稱") =CompanyName
rs("聯絡人姓名") = CName
rs("所在城市") = City
rs("電話號碼") = Tel
rs.Update
%>

用AddNew向數據庫請求添加數據。最后用Update寫入。注意:等號右側的變量保存着用Request取得的表單數據。雙引號內的就是數據庫的字段,應該與數據庫的一致啊。否則會出錯的。這樣變量內的數據就寫入了數據庫對應的字段內了。

Response.Write"<html><body><center><font size=5>祝賀,您的數據已經添加進數據庫了!<p>"
Response.Write"<a href='viewdatabase.asp'>查看數據</a>"
Response.Write"</font></center></body></html>"

'寫入成功后顯示祝賀信息並建立查看數據庫記錄的連接。

%>

 

(4)顯示/查看數據庫記錄:

<%
setdbconnection=Server.CREATEOBJECT("ADODB.CONNECTION")
DBPath =Server.MapPath("customer.mdb")
dbconnection.Open"driver={Microsoft Access Driver (*.mdb)};dbq=" & DBPath

'建立與數據庫的連接,與上同。

SQL="select * from 客戶 Order By 時間 DESC"
SETCustomerList=dbconnection.EXECUTE(SQL)
%>

    建立SQL查詢語句,表示從"客戶"表中查詢所有記錄,Order By 時間 DESC表示"按時間降序排序,"這樣最后添加的信息再最上面顯示。下面一句執行SQL查詢並將結果返回給Recordset對象CustomerList。

<html>
<body>
<FONTSIZE="5"><center>數據庫記錄</center></FONT>
<CENTER>
<TABLE BORDER=1>
<tr>

<td>編號</td>
<td>公司名稱</td>
<td>聯絡人姓名</td>
<td>所在城市</td>
<td>電話號碼</td>
</tr>
<% DO WHILE NOTCustomerList.EOF %>

'檢測記錄是否到了最后一條。EOF表示End of File。

<TR>
<TD><%=CustomerList("客戶編號") %></TD>
<TD><%=CustomerList("公司名稱") %></TD>
<TD><% =CustomerList("聯絡人姓名")%></TD>
<TD><%=CustomerList("所在城市") %></TD>
<TD><%=CustomerList("電話號碼") %></TD>
</TR>

<%=CustomerList("客戶編號") %>可以說是Response.Write方法的簡寫。將"客戶編號"字段內的數據寫入TD標簽間。

<%

CustomerList.movenext

loop

%>

如果還沒有到最后一條則指針移動到下一條。用Do While ... Loop循環逐一取得所有的記錄。

</TABLE>
</CENTER>


<center>
<inputtype="button" onclick="java script:location.href='add.htm'"value="添加數據">
</center>
</BODY>
</HTML>

RS.OPEN SQL,CONN,A,B

A: 

ADOPENFORWARDONLY(=0) 
只讀,且當前數據記錄只能向下移動

ADOPENKEYSET(=1) 
只讀,當前數據記錄可自由移動

ADOPENDYNAMIC(=2) 
可讀寫,當前數據記錄可自由移動

ADOPENSTATIC(=3) 
可讀寫,當前數據記錄可自由移動,可看到新增記錄

B:

ADLOCKREADONLY(=1) 
缺省鎖定類型,記錄集是只讀的,不能修改記錄

ADLOCKPESSIMISTIC(=2) 
悲觀鎖定,當修改記錄時,數據提供者將嘗試鎖定記錄以確保成功地編輯記錄。只要編輯一開始,則立即鎖住記錄。

ADLOCKOPTIMISTIC(=3) 
樂觀鎖定 ,直到用Update方法提交更新記錄時才鎖定記錄。

ADLOCKBATCHOPTIMISTIC(=4) 
批量樂觀鎖定,允許修改多個記錄,只有調用UpdateBatch方法后才鎖定記錄。

當不需要改動任何記錄時,應該使用只讀的記錄集,這樣提供者不用做任何檢測。
對於一般的使用,樂觀的鎖定可能是最好的選擇,因為記錄只被鎖定一小段時間,
數據在這段時間被更新。這減少了資源的使用。
===========================================================

 

數據庫連接:

<%

set conn=server.createobject("adodb.connection")

conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("數據庫名")

%>

 

 

打開數據庫:

exec="select * from 數據庫表"

setrs=server.createobject("adodb.recordset")

rs.open exec,conn,1,1

參數1,1為讀取

 

讀取內容格式:<%=rs("字段")%>

 

添加記錄處理程序:

<%

setconn=server.createobject("adodb.connection")

conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("數據庫名")

name=request.form("字段") name,tel,message為提交表單所設置的字段值

tel=request.form("字段")

message=request.form("字段")

exec="insert into 表名(字段)values('"+字段+"')"多個用逗號隔開

conn.execute exec 使用execute提交

conn.close

set conn=nothing

%>

 

搜索處理程序:

<%

name=request.form("字段") name,tel為提交表單所設置的字段值

tel=request.form("字段")

setconn=server.createobject("adodb.connection")

conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("數據庫名")

exec="select * from 表 where name='"+字段+"' and tel="+字段

setrs=server.createobject("adodb.recordset")

rs.open exec,conn,1,1

%>

'頁面搜索到的內容導出來

<%

do while not rs.eof

%><tr>

<td><%=rs("name")%></td>

<td><%=rs("tel")%></td>

<td><%=rs("time")%></td>

</tr>

<%

rs.movenext

loop

%>

 

刪除記錄處理程序:

<%

setconn=server.createobject("adodb.connection")

conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("數據庫名")

exec="delete * from 表名 where 編號="&request.form("id")

conn.execute exec

%>

 

 

修改記錄處理程序:

<%

setconn=server.createobject("adodb.connection")

conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("數據庫名")

exec="select * from 表名 where 編號="&request.form("id")

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

rs.open exec,conn,1,3 '1,3為修改意思

rs("name")=request.form("字段") 'name,tel,message為提交表單所設置的字段值

rs("tel")=request.form("字段")

rs("message")=request.form("字段")

rs.update

rs.close

set rs=nothing

conn.close

set conn=nothing

%>

修改記錄執行程序:輸入ID號頁面>>>導出相對應ID數據>>>>>>直接修改的處理程序

 

后台登陸處理程序例子:

<%

dim name,password

name=request.form("name")

password=request.form("password")

dim exec,conn,rs

exec="select *from 表名 where(name='"&字段&"' and password='"&字段&"')"

setconn=server.createobject("adodb.connection")

conn.open "driver={microsoft access driver(*.mdb)};dbq="&server.mappath("數據庫名")

setrs=server.createobject("adodb.recordset")

rs.open exec,conn

if not rs.eof then

rs.Close

conn.Close

session("checked")="yes"

session("check")="right"

response.Redirect "index.asp"

else

session("checked")="no"

session("check")="wrong"

response.Redirect "login.asp"

end if

%>

 

每個后台頁面加上:

<%if notsession("checked")="yes" then 'session里面定義一個checked字符串變量

response.Redirect "login.asp" 

else

%>


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM