ADO組件之顯示數(shù)據(jù)記錄_第1頁(yè)
ADO組件之顯示數(shù)據(jù)記錄_第2頁(yè)
ADO組件之顯示數(shù)據(jù)記錄_第3頁(yè)
ADO組件之顯示數(shù)據(jù)記錄_第4頁(yè)
ADO組件之顯示數(shù)據(jù)記錄_第5頁(yè)
已閱讀5頁(yè),還剩8頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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ì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論