版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
ADO組件之顯示數(shù)據(jù)記錄學(xué)習(xí)ASP的萬(wàn)里長(zhǎng)征就快到終點(diǎn)了:等把ASP的ADO組件搞定。當(dāng)然這也是最重要的一步,幾乎前面所有的學(xué)習(xí)都是為了這個(gè)最終的目的。OK,下面就來(lái)詳細(xì)系統(tǒng)地來(lái)一一掌握,步步為營(yíng),各個(gè)擊破。
一,擁有數(shù)據(jù)庫(kù)
可以這么說(shuō):靜態(tài)頁(yè)面和動(dòng)態(tài)頁(yè)面最大的區(qū)別就是采用了數(shù)據(jù)庫(kù)。有關(guān)一個(gè)WEB程序采用數(shù)據(jù)庫(kù)和不采用的優(yōu)越性比較,就不去細(xì)細(xì)分析了,主要精力還是放在如何使用數(shù)據(jù)庫(kù),如何熟練運(yùn)用數(shù)據(jù)庫(kù),如何更靈活地運(yùn)用數(shù)據(jù)庫(kù)等等……其中運(yùn)用操作數(shù)據(jù)庫(kù)主要是對(duì)數(shù)據(jù)庫(kù)內(nèi)容進(jìn)行:顯示、插入、修改、更新、查詢(xún)和刪除。
這些方法當(dāng)然也不是一口就能吃出來(lái)的,要慢慢感受咀嚼、理解消化。當(dāng)然首先很重要的便是先擁有數(shù)據(jù)庫(kù)了。否則,一切都是空談,巧媳婦難以無(wú)米之炊嘛。
一般而言,我們所說(shuō)的數(shù)據(jù)庫(kù)其實(shí)就是一個(gè)數(shù)據(jù)庫(kù)文件,該文件是由一些數(shù)據(jù)庫(kù)管理系統(tǒng)(DBMS)建立生成的。目前一般的DBMS也就是常用常聽(tīng)說(shuō)的ACCESS,SQLSERVER,MYSQL,ORACLE。當(dāng)然一般個(gè)人站點(diǎn),小型企業(yè)采用ACCESS完全足夠;稍微大些的就采用同樣是Microsoft公司的SQLSERVER或者是MYSQL,值得注意的是MYSQL一般是和另外一種網(wǎng)絡(luò)編程語(yǔ)言PHP完美結(jié)合的。當(dāng)然更大型的就采用ORACLE了。呵呵,曾經(jīng)在學(xué)習(xí)PB時(shí)還運(yùn)用到SYBASE數(shù)據(jù)庫(kù),UNIX系統(tǒng)的Informix數(shù)據(jù)庫(kù)……DBMS簡(jiǎn)直是多如牛毛-_-!
話說(shuō)過(guò)來(lái),目前我們就直接使用ACCESS了:1,使用簡(jiǎn)單;2,入門(mén)掌握容易;3,實(shí)在沒(méi)有比這個(gè)更適合初學(xué)的了。
一切還得從實(shí)際操作開(kāi)始。
1,打開(kāi)ACCESS數(shù)據(jù)庫(kù),選擇新建數(shù)據(jù)庫(kù),將其命名為cnbruce.mdb,并保存到一專(zhuān)門(mén)文件夾database中
[被屏蔽廣告]
2,在新建的數(shù)據(jù)庫(kù)容器中雙擊“使用設(shè)計(jì)器創(chuàng)建表”,彈出的表1窗口中字段名稱(chēng)輸入“cn_id”,數(shù)據(jù)類(lèi)型選擇“自動(dòng)編號(hào)”,并選擇上方工具欄中的鑰匙按鈕,將該字段設(shè)為主鍵。
繼續(xù)輸入字段“cn_title”,數(shù)據(jù)類(lèi)型選擇“文本”;NEXT輸入字段“cn_content”,數(shù)據(jù)類(lèi)型選擇“備注”;
PS:備注和一般類(lèi)型文本最大的區(qū)別就是備注允許插入的字段值相對(duì)要多些,這在插入一些較長(zhǎng)文章的時(shí)候尤其重要。
仍然輸入字段“cn_author”,數(shù)據(jù)類(lèi)型選擇“文本”;并且切換到下面“常規(guī)”中的“允許空字符串”選擇“是”。
PS:這表面允許cn_author字段的值可以是空的,這在當(dāng)提交表單,某些信息不填寫(xiě)但要正確插入數(shù)據(jù)庫(kù)時(shí),顯得很重要。
最后輸入字段“cn_time”,數(shù)據(jù)類(lèi)型選擇“日期/時(shí)間”,繼續(xù)切換到“常規(guī)”中的“默認(rèn)值”輸入“now()”函數(shù)
末了,將“表1”另存為“cnarticle”
[被屏蔽廣告]
3,雙擊打開(kāi)cnartile表,填寫(xiě)第一行:“cn_title”輸入“test”,“cn_content”輸入“thisisatest”,“cn_author”輸入“cnbruce”,時(shí)間已經(jīng)自動(dòng)添加。完成!關(guān)閉表,關(guān)閉數(shù)據(jù)庫(kù)。
[被屏蔽廣告]
二,建立數(shù)據(jù)庫(kù)連接
OK,數(shù)據(jù)庫(kù)已經(jīng)建立完畢,并且已經(jīng)填寫(xiě)了一行信息內(nèi)容。那么現(xiàn)在需要的就是同過(guò)ASP將該行信息顯示出來(lái)。
要想顯示,首先還是需要ASP與該數(shù)據(jù)庫(kù)文件建立連接,具體怎么建立?往下看。
1,conn.asp:主要起的是連接并打開(kāi)某數(shù)據(jù)庫(kù)文件的功能。該文件建議單獨(dú)存在,并且位置是和存放數(shù)據(jù)庫(kù)的文件夾database處與同一物理層次。
<%
db_path="database/cnbruce.mdb"
Setconn=Server.CreateObject("ADODB.Connection")
connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db_path)
conn.Openconnstr
%>
db_path="database/cnbruce.mdb",不用說(shuō),就是將數(shù)據(jù)庫(kù)的相對(duì)路徑賦到一個(gè)變量上,以方便下面繼續(xù)調(diào)用。
Setconn=Server.CreateObject("ADODB.Connection"),和其它建立組件一樣,建立了一個(gè)ADO連接,并用一對(duì)象conn來(lái)接受。
connstr="Provider=Microsoft.Jet.OLEDB.4.0;DataSource="&Server.MapPath(db_path),很顯然就是連接字符串了,其包括打開(kāi)數(shù)據(jù)庫(kù)的驅(qū)動(dòng)方法OLEDB,和打開(kāi)和哪個(gè)數(shù)據(jù)庫(kù)的連接(即數(shù)據(jù)庫(kù)的路徑)。
需要再次提醒的是:無(wú)論是FSO對(duì)文件、文件夾的操作還是ADO對(duì)數(shù)據(jù)庫(kù)的操作,對(duì)被操作文件的取得都是獲得的絕對(duì)的物理地址,一般情況之下,采用Server.MapPath方法相對(duì)較好。
conn.Openconnstr最后對(duì)象conn通過(guò)連接字符串connstr打開(kāi)了數(shù)據(jù)庫(kù)的連接。
三,顯示數(shù)據(jù)庫(kù)內(nèi)容
建立了數(shù)據(jù)庫(kù),建立了和數(shù)據(jù)庫(kù)的連接,下面水到渠成地就是將數(shù)據(jù)庫(kù)中的內(nèi)容通過(guò)ASP顯示出來(lái)。
2,showit.asp
<!--#includefile="conn.asp"-->
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticle"
rs.Opensql,conn,1,1
%>
<%
ifrs.EOFandrs.BOFthen
response.write("暫時(shí)還沒(méi)有文章")
else
DoUntilrs.EOF
response.write("文章標(biāo)題是:"&rs("cn_title"))
response.write("<br>文章作者是:"&rs("cn_author"))
response.write("<br>文章加入時(shí)間是:"&rs("cn_time"))
response.write("<br>文章內(nèi)容是:"&rs("cn_content"))
response.write("<hr>")
rs.MoveNext
Loop
endif
%>
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
簡(jiǎn)單調(diào)試本頁(yè),不出任何意外,相信一定能將數(shù)據(jù)庫(kù)中的信息顯示出來(lái)了。(PS:我的數(shù)據(jù)庫(kù)中輸寫(xiě)了兩行)
[被屏蔽廣告]
下面就來(lái)具體一個(gè)一個(gè)解釋來(lái)理解沒(méi)行的含義:
1,<!--#includefile="conn.asp"-->沒(méi)有任何爭(zhēng)議,主要是調(diào)用conn.asp的所起的功效,這在解釋conn.asp文件的時(shí)候已經(jīng)明白。
2,Setrs=Server.CreateObject("ADODB.Recordset")ADO組件除了Connection連接以外,還有Recordset綁定記錄集(相信用過(guò)DW做ASP的人現(xiàn)在開(kāi)始有些重回故里的感覺(jué)了)當(dāng)然rs可以形象地想象成數(shù)據(jù)庫(kù)表中的某一行。
3,sql="Select*fromcnarticle"標(biāo)準(zhǔn)的SQL結(jié)構(gòu)化查詢(xún)語(yǔ)言。很簡(jiǎn)單:建立了數(shù)據(jù)庫(kù)連接,也綁定了記錄集,那具體需要哪些信息呢?也就是要篩選一些記錄集合了,不過(guò)當(dāng)前采用的是無(wú)任何條件,即可以提取所有。
4,rs.Opensql,conn,1,1真正地打開(kāi)通向數(shù)據(jù)庫(kù)中記錄集的大門(mén),具體有關(guān)后面的參數(shù)可以從如下網(wǎng)址中獲得。不帶1,1會(huì)出錯(cuò)
前一個(gè)1是游標(biāo)類(lèi)型,第二個(gè)是鎖定類(lèi)型,在ADODB.inc(好像是這個(gè)文件名)定義了一堆常量,其中就有這兩個(gè),但是必須要包含那個(gè)文件才可以使用,所以就都使用數(shù)值了
第一個(gè):
1,前向游標(biāo):即讀取數(shù)據(jù)記錄只能從前向后讀,不能返回,并且不能反映讀取同時(shí)其它用戶(hù)對(duì)數(shù)據(jù)庫(kù)的更新
2,靜態(tài)游標(biāo),可向前和向后,但是不能反映其它用戶(hù)的更新
3,動(dòng)態(tài)游標(biāo),功能最強(qiáng),當(dāng)然也最耗資源
第二個(gè)
1,只讀鎖定,只能讀不可以寫(xiě)的鎖定數(shù)數(shù)據(jù)庫(kù)
2,悲觀鎖定,從打開(kāi)數(shù)據(jù)庫(kù)開(kāi)始鎖定數(shù)據(jù)庫(kù),即鎖定時(shí)其它用戶(hù)無(wú)法更新數(shù)據(jù)庫(kù)
3,樂(lè)觀鎖定,只在更新的瞬間鎖定數(shù)據(jù)庫(kù)
4,批量樂(lè)觀鎖定,在更新完一批以后提交到數(shù)據(jù)庫(kù)時(shí)才鎖定,如果有很多用戶(hù)同時(shí)在更新數(shù)據(jù)庫(kù),則有可能更新到同一條記錄
悲觀鎖定最不容易發(fā)生沖突,但是鎖定時(shí)間太長(zhǎng),各有各的用途,實(shí)際應(yīng)用時(shí)選擇
5,ifrs.EOFandrs.BOFthen該語(yǔ)句里面涉及到了rs.EOF和rs.BOF以及兩者的邏輯運(yùn)算and。rs.EOF表示到達(dá)數(shù)據(jù)庫(kù)表中的最后一行,rs.BOF表示到達(dá)數(shù)據(jù)庫(kù)表中的第一行。整個(gè)語(yǔ)句可以理解為,如果當(dāng)前數(shù)據(jù)庫(kù)中的最后一行就是數(shù)據(jù)庫(kù)表中第一行,那么可以肯定:當(dāng)前數(shù)據(jù)庫(kù)表中沒(méi)有任何數(shù)據(jù)。
6,
DoUntilrs.EOF
...
rs.MoveNext
Loop
主要就是一個(gè)DOLOOP循環(huán)語(yǔ)句了,其中循環(huán)的結(jié)束條件為:直到rs.EOF,即值得數(shù)據(jù)庫(kù)表的最后一行。那么在這些條件滿(mǎn)足的許可之內(nèi),就是來(lái)顯示具體的信息了。
每次循環(huán)只能顯示數(shù)據(jù)庫(kù)表中的一行,如果要繼續(xù)讀取下行,那么rs.MoveNext功能真是如此。
7,rs("cn_title")等等主要就是具體顯示記錄集中的哪個(gè)特定字段的信息值了。很是簡(jiǎn)單。
8,最后不要忘了釋放資源空間關(guān)閉記錄集連接,關(guān)閉數(shù)據(jù)庫(kù)連接。
四,一些特殊條件
1,有沒(méi)有注意到,數(shù)據(jù)庫(kù)表信息的顯示一般是按照時(shí)間的先后排列的,也就經(jīng)常提到的按時(shí)間的升序排列。需要注意:按時(shí)間升序,并不一定每個(gè)數(shù)據(jù)庫(kù)表中都要有一個(gè)時(shí)間/日期類(lèi)型的字段,只要存在一個(gè)自動(dòng)編號(hào)的字段就可以了。因?yàn)樵撟侄问怯啦恢貜?fù),并且是依次增大的。因此,按時(shí)間升序其實(shí)就是按自動(dòng)編號(hào)中號(hào)碼數(shù)值的增加來(lái)進(jìn)行排序的。
當(dāng)然,問(wèn)題的關(guān)鍵來(lái)了,那就是要按照時(shí)間的降序排列,即始終從最新的內(nèi)容開(kāi)始顯示。那具體需要哪些手術(shù)呢?
很簡(jiǎn)單,將連接字符串稍做修改。
由sql="Select*fromcnarticle"添加修改為
sql="Select*fromcnarticleorderbycn_iddesc"
其中orderbycn_id即通過(guò)cn_id字段,desc即降序了。
2,有是時(shí)候,只需要提取最前或者最新的幾條信息,那這個(gè)又具體如何操作呢?同樣還是連接字符串的修改
由sql="Select*fromcnarticleorderbycn_iddesc"添加修改為
sql="Selecttop3*fromcnarticleorderbycn_iddesc"
其中top3就表示提取最新的三條信息內(nèi)容了。
ThatsAll.現(xiàn)在一個(gè)文章系統(tǒng)、新聞系統(tǒng)或者留言本顯示部分的精華內(nèi)容你已不費(fèi)吹灰之力搞定。
ADO組件之插入數(shù)據(jù)記錄簡(jiǎn)單的顯示記錄已經(jīng)掌握,現(xiàn)在需要的就是通過(guò)ASP將信息內(nèi)容插入到數(shù)據(jù)庫(kù)中。
一、擁有數(shù)據(jù)庫(kù)cnbruce.mdb
本數(shù)據(jù)庫(kù)的作用就是用來(lái)被插入數(shù)據(jù)的,可以直接采用上節(jié)中已經(jīng)建立的cnbruce.mdb文件,當(dāng)然連接打開(kāi)數(shù)據(jù)庫(kù)的文件conn.asp也就順利引用了。
二、建立輸入插入信息的頁(yè)面平臺(tái)addit.html
本頁(yè)的主要作用是:顯示一些文本輸入框以用來(lái)提供輸入信息內(nèi)容提交數(shù)據(jù)庫(kù)。
1,addit.html
<formaction="addit.asp"method="post">
Title:<inputtype="text"name="title"><br>
Author:<inputtype="text"name="author"><br>
Content:<br>
<textareaname="content"rows="8"cols="30"></textarea><br>
<inputtype="submit"value="Add">
<inputtype="reset"value="Reset">
</form>
[CtrlA全部選擇提示:你可先修改部分代碼,再按運(yùn)行]
本頁(yè)其實(shí)很簡(jiǎn)單,就是通過(guò)submit按鈕將表單的信息內(nèi)容提交到addit.asp頁(yè)面去處理。網(wǎng)頁(yè)游戲
三、建立處理接受數(shù)據(jù)并插入數(shù)據(jù)庫(kù)表的頁(yè)面程序addit.asp
2,addit.asp
<!--#includefile="conn.asp"-->
<%
whattitle=request.form("title")
whoauthor=request.form("author")
whatcontent=request.form("content")
%>
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticle"
rs.Opensql,conn,3,2
%>
<%
rs.addnew
rs("cn_title")=whattitle
rs("cn_author")=whoauthor
rs("cn_content")=whatcontent
rs.update
%>
文章添加成功,<ahref="showit.asp">瀏覽</a>
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
恩,接著就是來(lái)具體分析一下。
1,<!--#includefile="conn.asp"-->不用說(shuō),凡是要和數(shù)據(jù)庫(kù)有聯(lián)系的都要運(yùn)用到該連接文件。
2,whattitle=request.form("title")之類(lèi)就是將上頁(yè)表單中接受過(guò)來(lái)的值賦到一變量上,方便下面程序的調(diào)用。
3,rs.Opensql,conn,3,2注意參數(shù)和顯示數(shù)據(jù)庫(kù)時(shí)采用的參數(shù)的不同。
4,rs.addnew很簡(jiǎn)單也很顯眼的一個(gè)聲明:新建一個(gè)數(shù)據(jù)庫(kù)記錄集行。
5,rs("cn_title")=whattitle之類(lèi)即將接受的表單值對(duì)應(yīng)到相關(guān)字段中。
6,rs.update只是值和數(shù)據(jù)庫(kù)字段的對(duì)應(yīng),完了后還要將對(duì)應(yīng)的值上傳提交到數(shù)據(jù)庫(kù)表中去。
7,插入后可以跳轉(zhuǎn)到showit.asp查看需要說(shuō)明,以后的ASP例題可能都是建立在前幾節(jié)內(nèi)容的基礎(chǔ)之上完成的。
8,釋放資源是規(guī)矩,不要忘記。
那么,現(xiàn)在。插入并顯示數(shù)據(jù)庫(kù)記錄,對(duì)你來(lái)說(shuō)完全是小菜一碟了。大體框架搭建完畢,下面就是具體的細(xì)化了。
其中包括:客戶(hù)端的表單檢測(cè),防止用戶(hù)信息輸入的遺漏;當(dāng)然最好還是要加上服務(wù)器端的表單檢測(cè),由于客戶(hù)端的某些原因(比如自行設(shè)計(jì)提交非檢測(cè)的頁(yè)面)基于安全考慮,一切還是依服務(wù)器端所接受信息為準(zhǔn)。那下面就繼續(xù)細(xì)化應(yīng)用下了。
1,客戶(hù)端檢測(cè)其實(shí)就是通過(guò)簡(jiǎn)單的腳本檢測(cè),這在初學(xué)ASP提到腳本的時(shí)候說(shuō)到,下面將再次重復(fù)。
加強(qiáng)的addit.html
<scriptlaguage="javascript">
<!--
functionform1_onsubmit()
{
if(document.form1.title.value=="")
{
alert("請(qǐng)輸入文章標(biāo)題")
document.form1.title.focus()
returnfalse
}
elseif(document.form1.content.value=="")
{
alert("請(qǐng)輸入文章內(nèi)容")
document.form1.content.focus()
returnfalse
}
}
-->
</script>
<formaction="addit.asp"method="post"name="form1"onsubmit="returnform1_onsubmit()">
Title:<inputtype="text"name="title"><br>
Author:<inputtype="text"name="author"><br>
Content:<br>
<textareaname="content"rows="8"cols="30"></textarea><br>
<inputtype="submit"value="Add">
<inputtype="reset"value="Reset">
</form>
[CtrlA全部選擇提示:你可先修改部分代碼,再按運(yùn)行]
2,服務(wù)器端檢測(cè)有人也許會(huì)問(wèn),既然有了客戶(hù)端的檢測(cè),那還有多個(gè)服務(wù)器端的檢測(cè)呢?原因很簡(jiǎn)單,比如仿照HTML表單提交頁(yè),自行設(shè)計(jì)一張去除了表單檢測(cè)的頁(yè)面。當(dāng)點(diǎn)擊提交,并且沒(méi)有任何信息時(shí),到達(dá)服務(wù)器端如沒(méi)有任何防御則肯定會(huì)造成數(shù)據(jù)插入的失敗。網(wǎng)頁(yè)編程
加強(qiáng)的addit.asp
<!--#includefile="conn.asp"-->
<%
whattitle=trim(request.form("title"))
whoauthor=trim(request.form("author"))
whatcontent=trim(request.form("content"))
%>
<%ifwhattitle=""then%>
<scriptlanguage=vbs>
alert("請(qǐng)輸入文章標(biāo)題")
history.go(-1)
</script>
<%endif%>
<%ifwhatcontent=""then%>
<scriptlanguage=vbs>
alert("請(qǐng)輸入文章標(biāo)題")
history.go(-1)
</script>
<%endif%>
<%
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticle"
rs.Opensql,conn,3,2
%>
<%
rs.addnew
rs("cn_title")=whattitle
rs("cn_author")=whoauthor
rs("cn_content")=whatcontent
rs.update
%>
文章添加成功,<ahref="showit.asp">瀏覽</a>網(wǎng)頁(yè)制作
<%
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
%>
可以看出,就是添加了如下類(lèi)似的判斷。
<%ifwhattitle=""then%>
<scriptlanguage=vbs>
alert("請(qǐng)輸入文章標(biāo)題")
history.go(-1)
</script>
<%endif%>
很簡(jiǎn)單,如果接受過(guò)來(lái)的信息為空,則彈出警告框,并且確認(rèn)后返回到上頁(yè)即addit.html了。當(dāng)然cn_author沒(méi)有設(shè)置檢測(cè),因?yàn)楫?dāng)初設(shè)計(jì)該字段的接受值是允許為空的。
OK,總結(jié)一下,插入記錄主要就是
rs.addnew
rs("cn_title")=whattitle
...
rs.update
很簡(jiǎn)單,先聲明addnew,然后一一對(duì)應(yīng),再提交插入數(shù)據(jù)庫(kù)。
這是一種插入數(shù)據(jù)庫(kù)的方法,下面就來(lái)接觸了解一下另外一種。
需要注意,結(jié)構(gòu)化的查詢(xún)語(yǔ)言也就是SQL語(yǔ)句能夠完成一些比較苛刻的數(shù)據(jù)庫(kù)操作。當(dāng)然,對(duì)于諸如提取、插入信息之流就更不在話下了。所以下面采用的插入記錄的方法就是直接采用SQL語(yǔ)法完成。
修改了的addit.asp
<!--#includefile="conn.asp"-->
<%
whattitle=request.form("title")網(wǎng)頁(yè)
whoauthor=request.form("author")
whatcontent=request.form("content")
%>
<%
sql="insertintocnarticle(cn_title,cn_author,cn_content)values("&whattitle&","&whoauthor&","&whatcontent&")"
conn.Execute(sql)
%>
文章添加成功,<ahref="showit.asp">瀏覽</a>
<%
conn.close
setconn=Nothing
%>
本程序中,你會(huì)發(fā)現(xiàn)只要一行的SQL語(yǔ)句,不需要建立Rescord記錄集行,不需要聲明addnew,不要執(zhí)行update。直接通過(guò)conn.Execute(sql)來(lái)完成。
當(dāng)然應(yīng)用此種方法,若必填字段接受值為空時(shí),同樣能夠插入記錄。這和采用第一種會(huì)報(bào)
MicrosoftJETDatabaseEngine錯(cuò)誤80040e21
字段xxx.xxx不能是零長(zhǎng)度的字符串。
具有很大的容錯(cuò)性。
是程序的可讀性還是方法的簡(jiǎn)便高效率就任君選擇了。
ADO組件之修改數(shù)據(jù)記錄再來(lái)小總結(jié)一下:對(duì)數(shù)據(jù)庫(kù)的操作無(wú)非就是顯示記錄,插入記錄,修改記錄,刪除記錄,查詢(xún)記錄。
并且在有關(guān)顯示記錄的時(shí)候還涉及到顯示的輸出格式、分頁(yè)程序,那么再結(jié)合插入記錄,一個(gè)簡(jiǎn)單的新聞系統(tǒng),文章系統(tǒng),留言系統(tǒng),注冊(cè)登陸系統(tǒng)不成任何問(wèn)題。
下面就涉及到管理這塊,需要對(duì)數(shù)據(jù)庫(kù)記錄進(jìn)行修改。
首先,要修改哪條
修改,不是籠而統(tǒng)之的,而是要針對(duì)某條具體對(duì)相應(yīng)修改??梢孕蜗蟮卣f(shuō),就是對(duì)數(shù)據(jù)庫(kù)表中的具體哪一行進(jìn)行具體的修改。
所以,這時(shí)候的記錄集就有它特定的某個(gè),當(dāng)然這個(gè)主要還是由SQL語(yǔ)句來(lái)決定的。
比如sql="select*fromtablewhereid=1"就表示提取的id編號(hào)是1的那行的所有記錄,然后只要將該行中需要修改的字段賦以新值然后上傳數(shù)據(jù)庫(kù)就OK了。
同樣的語(yǔ)句sql="select*fromtablewhereid=2"相信你也能明白。
但作為我們?cè)陧?yè)面中,可不是就這樣固定的,有可是選擇某連接,或者輸入某表單值……跳轉(zhuǎn)到專(zhuān)門(mén)的修改頁(yè),這樣所有的任務(wù)全在修改頁(yè)上了,它所具備的SQL語(yǔ)句應(yīng)該是適應(yīng)性強(qiáng)的
比如sql="select*fromtablewhereid="&request.queyrstring("id")
其次,將要修改的對(duì)應(yīng)賦值
很簡(jiǎn)單,正如插入記錄一樣,將字段和值對(duì)應(yīng)起來(lái)。
rs("cn_name")="cnbruce"
rs("cn_sex")="male"
對(duì)應(yīng)的值當(dāng)然也可以是某個(gè)變量或函數(shù)
最后,上傳更新數(shù)據(jù)庫(kù)
和插入一樣進(jìn)行rs.updata,其實(shí)觀察下來(lái),插入新記錄和更新記錄只是多了rs.addnew這行的聲明。
1,showit.asp
該文件是前面例中所建立引用的。其主要是顯示的作用,那么現(xiàn)在,針對(duì)具體的某條記錄增加跳轉(zhuǎn)到修改頁(yè)的超級(jí)鏈接。
<%
Fori=1tors.PageSize利用fornext循環(huán)依次讀出當(dāng)前頁(yè)的記錄
ifrs.EOFthen
ExitFor
endif
response.write("<ahref=change.asp?id="&rs("cn_id")&">修改</a>")
response.write("文章標(biāo)題是:"&rs("cn_title"))
response.write("<br>文章作者是:"&rs("cn_author"))
response.write("<br>文章加入時(shí)間是:"&rs("cn_time"))
response.write("<br>文章內(nèi)容是:"&rs("cn_content"))
response.write("<hr>")
rs.MoveNext
Next
%>
注意response.write("<ahref=change.asp?id="&rs("cn_id")&">修改</a>")
后面的參數(shù)id的值則是動(dòng)態(tài)的,那接著就看chang.asp的能耐了。
2,change.asp
<!--#includefile="conn.asp"-->
<%
id=request.querystring("id")
%>
<%ifrequest.form("submit")="change"then
whattitle=request.form("title")
whoauthor=request.form("author")
whatcontent=request.form("content")
id=request.form("id")
Setrs=Server.CreateObject("ADODB.Recordset")
sql="Select*fromcnarticlewherecn_id="&id
rs.Opensql,conn,3,2
rs("cn_title")=whattitle
rs("cn_author")=whoauthor
rs("cn_content")=whatcontent
rs.update
rs.close
Setrs=Nothing
conn.close
setconn=Nothing
response.redirect("showit.asp")
response.end
%>
<%endif%>
<%
ifid<>""then
Setrs=Server.CreateObject("ADODB.Recordset")
sql="select*fromcnarticlewherecn_id="&id
rs.Opensql,conn,1,1
whattitle=rs("cn_title")
whoauthor=rs("cn_author")
whatcontent=rs("cn_content")
endif
%>
<formaction="change.asp"method="post">
Title:<inputtype="text"name="title"value=<%=whattitle%>><br>
Author:<inputtype="text"name="author"value=<%=whoauthor%>><br>
Content:<br>
<textareaname="content"rows="8"cols="30"><%=whatcontent%></textarea><br>
<inputtype="submit"value="change"name="submit">網(wǎng)頁(yè)優(yōu)化
<inputtype="reset"value="Reset">
<inputname="id"type="hidden"value="<%=id%>">
</form>
當(dāng)然所有的檢察,安全防護(hù)都還沒(méi)做,BUG多多,自己也來(lái)慢慢解決。
另外一類(lèi)的修改更新
<%ifrequest.form("submit")="change"then
whattitle=request.form("title")
whoauthor=request.form("author")
whatcontent=request.form("content")
id=request.form("id")
sql="updatecnarticlesetcn_title="&whattitle&",cn_author="&whoauthor&",cn_content="&whatcontent&"wherecn_id="&id
conn.Execute(sql)
conn.close
setconn=Nothing
response.redirect("showit.asp")
response.end
%>
ADO組件之刪除數(shù)據(jù)記錄1,首先要明確刪除哪條記錄
無(wú)非還就是SQL語(yǔ)句了,比如對(duì)應(yīng)到特定的某ID上。
id=request.form("id")
sql="Select*fromcnarticlewherecn_id="&id
Setrs=Server.CreateObject("ADODB.Recordset")
rs.Opensql,conn,2,3
2,很簡(jiǎn)單的一條語(yǔ)句:刪除
rs.delete
3,最好能在修改之前征求確認(rèn)刪除
<scriptlanguage="JavaScript">
<!--
functionsuredo(src,q)
{
varret;
ret=confirm(q);
if(ret!=false)window.location=src;
}
//-->
</script>
<ahref=javascript:suredo("del.asp?id=<%=id%>","確定刪除?")>Delete</a>
最直接的一條語(yǔ)句
sql="delete*fromcnarticlewherecn_id="&id
conn.Execute(sql)
ADO組件之查詢(xún)數(shù)據(jù)記錄來(lái)源:
2007-2-1300:00:00網(wǎng)友評(píng)論0條字體:[大中小]~我要投稿!首先,了解下原理。
1,提供文本框進(jìn)行查詢(xún)內(nèi)容的輸入
2,將查詢(xún)信息提交頁(yè)面程序處理
3,程序頁(yè)主要作用:接受查詢(xún)信息,根據(jù)此信息調(diào)用特定的SQL查詢(xún)語(yǔ)句,得出查詢(xún)結(jié)果并能顯示。
其實(shí),主要精髓就是SQL語(yǔ)句的寫(xiě)法上。
之前的提取為"select*formwhattablewhereid="&id
插入為"insertintowhattable(xx_rs)values("&content&")"
刪除為"deletefromwhattablewhereid="&id
修改為"updatewhattablesetxx_rs="&log_content&"whereid="&id
則查詢(xún)?yōu)?select*formwhattablewherexx_rslike%"&wahtkey&"%"
下面通過(guò)一個(gè)例題來(lái)研究下
1,建立數(shù)據(jù)庫(kù)zipcode.mdb中的zip表
字段id,類(lèi)型自動(dòng)編
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 旅游攻略節(jié)目監(jiān)制服務(wù)協(xié)議模板
- 電信工程泵機(jī)租賃協(xié)議
- 衛(wèi)生間防水工程協(xié)議書(shū)
- 零售商業(yè)租賃協(xié)議
- 重慶市2025屆物理高一上期中質(zhì)量檢測(cè)模擬試題含解析
- 2025屆廣東省深圳市格睿特高級(jí)中學(xué)物理高二上期中監(jiān)測(cè)試題含解析
- 山東省新泰市第二中學(xué)2025屆物理高二上期末經(jīng)典模擬試題含解析
- 廣東肇慶市2025屆高三上物理期中檢測(cè)模擬試題含解析
- 2025屆上海市儲(chǔ)能中學(xué)物理高二上期末復(fù)習(xí)檢測(cè)試題含解析
- 2025屆云南師范大學(xué)實(shí)驗(yàn)中學(xué)物理高二上期末教學(xué)質(zhì)量檢測(cè)試題含解析
- 儲(chǔ)能電池?zé)崾Э鼗馂?zāi)演化機(jī)制及防控
- 2024年公司市場(chǎng)化選聘經(jīng)理層考核管理辦法
- 太陽(yáng)能光伏電站施工安全標(biāo)準(zhǔn)化建設(shè)考核試卷
- 防炫(AG工藝)玻璃項(xiàng)目可行性研究報(bào)告模板-備案拿地
- 煤炭洗選工藝數(shù)字化與智能化
- 2024年【汽車(chē)駕駛員(技師)】證模擬考試及答案
- 大學(xué)生心理健康教育智慧樹(shù)知到期末考試答案章節(jié)答案2024年魯東大學(xué)
- 瑜伽脊柱扭轉(zhuǎn)課程設(shè)計(jì)
- 生物技術(shù)研究合伙協(xié)議
- 室外燃?xì)夤艿腊惭b施工方案
- 小學(xué)生個(gè)人行為習(xí)慣自我管理、監(jiān)督考核評(píng)分表
評(píng)論
0/150
提交評(píng)論