Asp與Access數(shù)據(jù)庫連接入門
序言
靜態(tài)網(wǎng)頁是指直接或間接制作成html的網(wǎng)頁,這種網(wǎng)頁的內(nèi)容是固定的,修改和更新都必須要通過Dreamweaver、Frontpage等網(wǎng)頁制作工具,而且只要修改了網(wǎng)頁中的一個(gè)字符或一個(gè)圖片都要重新上傳一次覆蓋原來的頁面。
動(dòng)態(tài)網(wǎng)頁是以數(shù)據(jù)庫技術(shù)為基礎(chǔ),以.asp、.jsp、.php、.perl、.cgi等形式為后綴,通過腳本將網(wǎng)站內(nèi)容動(dòng)態(tài)存儲(chǔ)到數(shù)據(jù)庫,用戶訪問網(wǎng)站是通過讀取數(shù)據(jù)庫內(nèi)容來動(dòng)態(tài)生成網(wǎng)頁的方法。
靜態(tài)網(wǎng)頁和動(dòng)態(tài)網(wǎng)頁最大的區(qū)別,就是動(dòng)態(tài)網(wǎng)站比靜態(tài)網(wǎng)站更新起來更加容易。靜態(tài)網(wǎng)頁如果想增加一篇文章,就需要重新制作一個(gè)新的網(wǎng)頁并上傳;而動(dòng)態(tài)網(wǎng)頁只需用管理者身份登陸到網(wǎng)站的后臺(tái)網(wǎng)頁,像填空題一樣填入文章內(nèi)容提交就可以了。也就是說,即使網(wǎng)站錄入人員對(duì)網(wǎng)頁制作一竅不通,也一樣能管理好一個(gè)網(wǎng)站。
我們有時(shí)打開一個(gè)網(wǎng)頁,會(huì)發(fā)現(xiàn)IE地址欄中網(wǎng)頁的名字有的叫*.asp,有的叫*.htm,這個(gè).asp就是典型的動(dòng)態(tài)網(wǎng)頁。下面我就通過一個(gè)例子來學(xué)習(xí)一下用ASP如何實(shí)現(xiàn)數(shù)據(jù)的讀取、填加、修改和刪除。
一.ASP運(yùn)行環(huán)境的配置
ASP網(wǎng)頁若想正常測(cè)試,必須安裝IIS。
WIN2000 server/WIN2000 advance server都是默認(rèn)安裝的,如果在安裝時(shí)沒選擇的話,也按照下面的步驟。
開始->控制面板->添加/刪除程序->添加刪除WINDOWS程序組件,在里面把internet信息服務(wù)(IIS)打上勾,然后插入WINDOWS安裝光盤,點(diǎn)擊下一步,這樣就開始安裝IIS,安裝過程就不多說了,也是普通軟件安裝一樣,不是點(diǎn)下一步就是點(diǎn)完成和確定。
開始配置IIS。開始->控制面板->管理工具->internet信息服務(wù),打開之后就到了IIS的控制臺(tái),點(diǎn)計(jì)算機(jī)名前面的+號(hào)展開,再點(diǎn)網(wǎng)站前在的+號(hào)展開,這時(shí)就有一個(gè)默認(rèn)網(wǎng)站,這里就是我們要配置IIS的關(guān)鍵地方了。右擊“默認(rèn)網(wǎng)站”,在彈出菜單里選擇“屬性”這時(shí)就會(huì)彈出“屬性”選頂卡。在“網(wǎng)站”選項(xiàng)卡下選擇IP地址為本機(jī)的IP地址,如:127.0.0.1,選擇“主目錄”選項(xiàng)卡,本地路徑就是你的網(wǎng)站所在路徑,這里你可以點(diǎn)瀏覽更改到你想設(shè)置的目錄下,默認(rèn)是:X:\inetpub\wwwroot(X:表示系統(tǒng)盤)。這些設(shè)置完后就轉(zhuǎn)到“文檔”選項(xiàng)卡,首先要在“啟用默認(rèn)文檔”前面打勾,默認(rèn)是打勾的。點(diǎn)擊“添加”,添入index.asp,這是你網(wǎng)站默認(rèn)打開的主文件名,點(diǎn)應(yīng)用、確定就返回到IIS控制臺(tái)。
IIS我就簡單的介紹這些,其它的高級(jí)設(shè)置請(qǐng)朋友們自己試試。
二.動(dòng)態(tài)網(wǎng)頁中數(shù)據(jù)的讀取
比如,有一個(gè)新聞網(wǎng)站,數(shù)據(jù)庫中已有許多新聞,我們要把它的最新的10條新聞列到網(wǎng)頁中,如何辦到呢?
首先,我們要了解一下網(wǎng)站數(shù)據(jù)庫的結(jié)構(gòu),一般ASP常和access數(shù)據(jù)庫結(jié)合,例如本例中數(shù)據(jù)庫的名字叫news.mdb,數(shù)據(jù)庫中有一個(gè)表構(gòu)成,表名叫news,news表的結(jié)構(gòu)如下:
字段名 字段類型 備注
Id 自動(dòng)編號(hào) 新聞自動(dòng)編號(hào)
Name 文本 新聞標(biāo)題
Content 備注 新聞內(nèi)容
date 日期 新聞日期,默認(rèn)值為當(dāng)前日期date()
在表中先填加幾條供測(cè)試用的文章。
在做新聞網(wǎng)頁之前我們首先需要建立一段每次都要調(diào)用的代碼,就是在每次讀數(shù)據(jù)之前都要先找到數(shù)據(jù)庫的位置,并打開數(shù)據(jù)庫。用記事本新建一個(gè)conn.asp的文件,在其中輸入:
<%dim conn,connstr,db
db="news.mdb" ' 數(shù)據(jù)庫文件位置
connstr="DBQ="+server.mappath(""&db&"")+";DefaultDir=;DRIVER={Microsoft Access Driver (*.mdb)};" ‘ 打開數(shù)據(jù)庫
set conn=server.createobject("ADODB.CONNECTION") ' 打開數(shù)據(jù)表
conn.open connstr %>
conn.asp因?yàn)槊看巫x數(shù)據(jù)庫都要用到,所以把這段代碼單獨(dú)做成文件,以便于用到時(shí)直接調(diào)用,調(diào)用方法是:<!--#include file="conn.asp" --> 此調(diào)用一般放在代碼最上方。
現(xiàn)在我們就用記事本建立一個(gè)名為top10.asp的文件,此文件就是用來顯示數(shù)據(jù)庫中最新的10條新聞的網(wǎng)頁。用記事本在top10.asp文件中寫入:
<!--#include file="conn.asp" -->
<%set rs = server.createobject("adodb.recordset")
sql="select top 10 * from news order by id desc " ' 選擇news表中最新10條
rs.open sql,conn,1,1
if rs.eof and rs.bof then ‘ 如果news表是空的即無數(shù)據(jù),那么
response.write "沒有新聞!" ‘ 在網(wǎng)頁上輸出:“沒有新聞”四個(gè)字
else ‘ 否則
do while not rs.eof ‘ 當(dāng)記錄未結(jié)束時(shí),循環(huán)
response.write rs("name")"<br>" ‘ 在網(wǎng)頁上輸出news表中的新聞標(biāo)題字段
rs.movenext ‘ 移到下一條記錄
loop ‘ 回到上方的do語句,繼續(xù)循環(huán)
end if ‘ 條件語句結(jié)束
rs.close ‘ 關(guān)閉數(shù)據(jù)集
set rs = nothing
conn.close ‘ 關(guān)閉數(shù)據(jù)庫
set conn = nothing%>
這樣,我們就完成了頁面中顯示最新10條新聞的代碼,現(xiàn)在我們就可以利用IIS+IE進(jìn)行ASP的調(diào)試了。打開IE,在地址欄里輸入:http://127.0.0.1/top10.asp,IE中就會(huì)顯示數(shù)據(jù)庫中news表的最新10條新聞標(biāo)題了。
這種代碼一般顯示在網(wǎng)站首頁,同樣,數(shù)據(jù)庫中如果有其它表,你也可以用同樣的方法顯示最新的幾條。
需要大家注意的是:如果表中的數(shù)據(jù)過多,不要在一個(gè)網(wǎng)頁顯示表中的全部記錄,這樣做不僅會(huì)造成網(wǎng)頁過長,而且讀取速度也會(huì)變慢,如果想讀取記錄提倡大家使用分頁顯示的方法。
三.動(dòng)態(tài)網(wǎng)站中數(shù)據(jù)的填加
動(dòng)態(tài)網(wǎng)站有一個(gè)最大的優(yōu)點(diǎn)就是可以像填空題一樣輸入所填加的新文章,可是如何做到呢?
下面我繼續(xù)向大家介紹如何利用網(wǎng)頁向數(shù)據(jù)庫中填加新記錄。一般填加記錄只有管理員才有權(quán)利,但為了讓大家明白其中的原理,我們做一個(gè)任何人都可填加記錄的例子。
還以上文中用到的數(shù)據(jù)庫為例,我們先用FP或DW來制作一個(gè)填加新聞的網(wǎng)頁addnews.asp,效果如下圖:
上圖中標(biāo)題文本框的名稱為name,內(nèi)容文本框名稱為content,都包含在表單中,有的朋友可能要問了,為什么網(wǎng)頁中沒有news表中的ID和date字段?這是因?yàn)镮D字段是自動(dòng)編號(hào),你每填一條記錄,ID號(hào)都會(huì)自動(dòng)生成,無需干預(yù),而日期date我們?cè)谏衔闹刑岬?,其默認(rèn)值已設(shè)為date(),是填加記錄時(shí)的當(dāng)前日期,也無需干預(yù)。
現(xiàn)在我們用記事本或FP、DW的代碼狀態(tài)打開addnews.asp,在表單處將原來的表單代碼改為:<form method="post"action="addnews.asp?action=add">此意義為人們?cè)谔峤槐韱螘r(shí)執(zhí)行action=add這個(gè)動(dòng)作中的代碼,然后在代碼最前端插入如下代碼:
<!--#include file="conn.asp" -->
<%if Request("action")="add" then ' 如果action=add(即用戶點(diǎn)提交后)那么
name=Request("name") ' name等于從文本框name獲取的值
content= Request("content") ' content等于從文本框content獲取的值
Set rs = Server.CreateObject("ADODB.Recordset") ' 打開數(shù)據(jù)庫
sql="select * from news " ' 讀取表news
rs.open sql,conn,1,3
rs.addnew ' 填加新記錄
rs("name")=name ' 讓字段name的值等于name
rs("content")=content ' 讓字段content的值等于content
rs.update ' 更新數(shù)據(jù)
rs.close '關(guān)閉數(shù)據(jù)集
response.write "文章添加成功!" ' 顯示添加成功的信息!
end if ' 條件語句結(jié)束
%>
用IE回到top10.asp看一看,新填加的記錄是不是已經(jīng)在前面顯示出了?這讓你想到那些留言本了吧?這其實(shí)和留言本的道理是一樣的。
四.動(dòng)態(tài)網(wǎng)頁中數(shù)據(jù)的修改
如果文章在填加時(shí)不小心出現(xiàn)失誤,填加成功后又如何修改呢?
我們先在top10.asp中填加一個(gè)文章修改的鏈接,將其中的
response.write rs("name")"<br>" 這一行修改為:
response.write rs("name")&"<a href=edit.asp?id="&rs("id")&">修改</a><br>"
此行的意思是,每條新聞標(biāo)題后面加了一個(gè)修改鏈接,鏈接到edit.asp。
用記事本新建一個(gè)edit.asp文件,樣式同addnews.asp一樣,含一個(gè)表單,兩個(gè)文本框,分別為name和content。但要將表單部分修改一下,修改為:
<form method="post" action="edit.asp?action=edit&id=<%=id%>">
意思是,當(dāng)人們提交表單時(shí)就會(huì)將相應(yīng)的ID記錄提交給edit.asp中action為edit時(shí)的代碼。
并同addnews.asp一樣,要在代碼最上方加入如下代碼:
<!--#include file="conn.asp" -->
<% id=request("id") ' 獲取需修改記錄的ID號(hào)
if Request("action")="edit" then ' 如果action=edit(即用戶點(diǎn)提交后)那么
name=Request("name") ' name等于從文本框name獲取的值
content= Request("content") ' content等于從文本框content獲取的值
Set rs = Server.CreateObject("ADODB.Recordset") ' 打開數(shù)據(jù)庫
sql="select * from news where id="&id " ' 讀取表中ID為所獲取id的那條記錄
rs.open sql,conn,1,3
rs("name")=name ' 讓字段name的值等于name
rs("content")=content ' 讓字段content的值等于content
rs.update ' 更新數(shù)據(jù)集
rs.close '關(guān)閉數(shù)據(jù)集
response.write "文章修改成功!" ' 顯示修改成功的信息!
end if ' 條件語句結(jié)束
%>
與填加記錄不同的是,在修改數(shù)據(jù)之前,先要讀出數(shù)據(jù)庫中原來新聞的內(nèi)容,所以我們需要先把此記錄的數(shù)據(jù)讀出,才可繼續(xù)修改,所以要接著加入以下代碼:
<%Set ars = Server.CreateObject("ADODB.Recordset") '打開數(shù)據(jù)庫
ars.Open "Select * From news where id="&id, conn,3,3%> ' 從news表中讀取id號(hào)為所修改新聞的ID號(hào)的那條記錄
%>
然后將兩個(gè)文本框的默認(rèn)值修改一下,name的默認(rèn)值改為:<%=ars(“name”)%>,content的默認(rèn)值改為:<%=ars(“content”)%>,保存。
在IE中我們測(cè)試一下top10.asp,每條新聞后出現(xiàn)了“修改”鏈接,點(diǎn)擊修改后,就會(huì)進(jìn)入到地址為edit.asp?id=“數(shù)字”的網(wǎng)頁中,地址中id后面的數(shù)字表示你要修改的那一條記錄的id號(hào),它可以通過request(“id”)語句來讀取。
五.刪除數(shù)據(jù)庫中的記錄
如果你誤加了一條新聞或不小心加了兩條同樣的記錄,如何將其刪除呢?
下面我們接著介紹刪除一條記錄的方法。
為了測(cè)試方便,我們將上文中的top10.asp中的“修改”鏈接后,再加入一個(gè)“刪除”鏈接。把原來的
response.write rs("name")&"<a href=edit.asp?id="&rs("id")&">修改</a><br>"
這一行修改為:
response.write rs("name")&"<ahref=edit.asp?id="&rs("id")&">修改</a><ahref=del.asp?id="&rs("id")&">刪除</a><br>"
看到上面的代碼,大家應(yīng)該明白了,現(xiàn)在我們要建立一個(gè)刪除網(wǎng)頁del.asp。
并在其中寫入代碼:
<!--#include file="conn.asp"-->
<%id = Request("id") ' 獲取所刪除記錄的ID號(hào)
Set del=Conn.Execute("Delete * From [news] Where ID=" & id)%> ' 刪除news表中所獲取的那條id記錄
<%response.redirect "top10.asp"%> ' 返回top10.asp網(wǎng)頁
在IE中測(cè)試top10.asp。
以上我們介紹了ASP網(wǎng)頁中數(shù)據(jù)的讀取、填加、修改和刪除的基本方法,希望能與您分享。
附問題: 為啥向數(shù)據(jù)庫插入前還要sql="select * from tblcmt" 查詢一遍呢?不能直接用insert into table ...嗎?
解答: inset ino 也可以的
sql="insert into 數(shù)據(jù)表名(字段1,字段2,字段3.......)values(值1,值2,值3,.....)"
<注意 值 如果是數(shù)字類型 “&值&” 如果是文本類型 '"&&"'>
conn.execute(sql)
-------------------------------------------------------------------------
不過,一般情況下使用
rs.addnew '在記錄集中增加一條空白新記錄,然后賦值..
rs("字段n")=變量n
...
rs.update
這樣的話非常靈活直觀的對(duì)表中任何字段進(jìn)行賦值,或?qū)ζ渲胁糠肿侄钨x值..
聯(lián)系客服