麻辣家族討論版版's Archiver

小誌 發表於 2010-5-26 00:21

(實戰專題) 資料庫聯絡簿 上篇

在上一章中小誌已經說明:範例是以校園應用為主題,因此在名稱的定義上都稱為「聯絡簿」而不是「留言版」!希望大家不要誤會了呦!

本範例中將利用SQL語法過濾特定的家長留言意見,讓老師可以針對某位特定學生家長所發表的意見作出獨立的回應,同時,家長在發表個人意見時,若認為意見內容涉及敏感的話題或是意見內容涉及私人隱私,都可用『悄悄話』的方式發言,這些『悄悄話』將不會被顯示出來讓大家看到,當然,老師擁有管理的能力,只要以密碼登入管理模式,就可以進行各個學生家長的單獨意見回覆,而且還能看到家長們所留下的『悄悄話』。

[color=DarkOrange][size=5][b]組成構造[/b][/size][/color]
   本範例中使用了多種ASP物件的引用,同時還應用了許多網頁表單的設計技巧,不過!如果您已經熟悉了我們上一章『文字檔聯絡簿』範例的原理,相信本範例中所提之設計理論對各位網路e教師來說,簡直就是易如反掌。
[list]
[*]我們的『家庭聯絡簿』因為必須具備發言內容涉及敏感話題或是涉及私人隱私的家長發言可用『悄悄話』的方式發言與顯示,同時也希望老師能針對某位特定學生家長所發表的意見作出獨立的回應,因此,我們『顯示留言意見』的網頁就必須具備多項功能,當顯示模式在一般情況時要能顯示家長們的一般性發言,同時還得將『悄悄話』的發言隱藏起來;而當老師以密碼登入成為管理模式時,則必須將一般性發言與悄悄話發言的資料全部顯示出來,同時還得讓老師們可以針對某位特定學生家長所發表的意見作出獨立的回應,在本例中我們將這個『顯示留言意見』的網頁檔案名稱定為:『guest.asp』。

[*]當學生家長想要發表意見或反映的時候,理所當然的我們還得再設計一個能夠讓學生家長發表意見的表單網頁,這個表單網頁必須提供各個資料輸入的欄位來讓學生家長填寫,最重要的是必須能讓學生家長自行選擇他的發言內容是否要公開,如果不公開,則我們只能在老師以密碼登入成為管理模式時才將留言內容顯示出來,這個讓學生家長發言的『家長發言表單』網頁我們將它的檔案名稱定為:『addmsg.asp』。

[*]當學生家長於『家長發言表單』中填寫好相關資料按下『送出意見』按鈕之後,這些填寫好的資料將交由紀錄以及處理家長發言的ASP程式來寫入資料庫,這個紀錄以及處理家長發言的ASP程式網頁檔案我們將它定名為:『add.asp』,此ASP程式不僅要將家長的發言寫入資料庫,同時還必須控制將瀏覽網頁轉向回『顯示留言意見』的網頁。

[*]因為我們的『家庭聯絡簿』能讓老師針對某位特定學生家長所發表的意見作出獨立的回應,因此我們必須設計一個老師回覆專用的『老師回覆表單』,這個讓老師回覆學生家長發言的『老師回覆表單』網頁我們將它的檔案名稱定為:『teachans.asp』。

[*]當老師於『老師回覆表單』中填寫好回覆內容後資料按下『送出回覆』按鈕之後,這些填寫好的資料將交由紀錄以及處理老師回覆內容的ASP程式來寫入資料庫,這個紀錄以及處理老師回覆內容的ASP程式網頁檔案我們將它定名為:『anssave.asp』,此ASP程式會將回覆內容寫入資料庫,同樣也會將瀏覽網頁轉向回『顯示留言意見』的網頁。

[*]最後,還有一個必要的檔案必須被建立,那就是『紀錄資料檔案』,這個檔案負責存放家長發言資料與老師回覆內容的資料記錄,在本範例中這個紀錄資料檔案為一Access型態的資料庫檔案,我們將它定名為:『message.mdb』。
[/list]

    因為本『家庭聯絡簿』的功能比較多,同時程式的內容也較為複雜,因此我們聯絡簿的構成共分成六大部分:
[list=1]
[*]意見留言結果網頁:用來顯示家長發言與老師回覆內容,同時還具備一般模式與管理模式兩種顯示方法。

[*]家長發言表單網頁:讓學生家長填寫發言內容並選擇發言性質。

[*]家長發言資料處理ASP程式:處理家長發表的意見資料,同時將這些意見資料紀錄起來並將網頁顯示轉向至意見留言結果網頁。

[*]老師回覆表單網頁:讓老師針對某位特定學生家長所發表的意見作出獨立的回應。

[*]老師回覆資料處理ASP程式:處理老師回覆的資料內容,同時將這些意見資料紀錄起來並將網頁顯示轉向至意見留言結果網頁。

[*]紀錄資料檔案:用來儲存家長發言資料與老師回覆資料的Access型態資料庫檔案。
[/list]

下圖為家庭聯絡簿的組成與關聯性說明圖:

[attach]921[/attach]

小誌 發表於 2010-5-26 00:27

[color=DarkOrange][size=5][b] 資料庫與留言顯示程式網頁[/b][/size][/color]
因為我們將家長發言與老師回覆的內容資料全部儲存在資料庫中,因此,要在網頁中顯示目前的家長發言與老師回覆資料,則我們必須先進行資料庫的連結與開啟,要連結資料庫我們必須使用ADO物件群的Connection物件;而要開啟資料庫則必須使用DO物件群的Recordset物件,現在就請您先檢視一下程式內容,接下來我們再來分析一下程式中的每一個動作。[code]Set CN = Server.CreateObject("ADODB.Connection")
CN.Open "Driver={Microsoft Access Driver (*.mdb)};_
DBQ="&Server.MapPath("message.mdb")
Set RS=Server.CreateObject("ADODB.Recordset")
SQL="SELECT*From allmessage order by 留言日期 Desc"
RS.Open SQL,CN,1,1[/code][color=Green][size=4][b]建立一個Connection物件:CN[/b][/size][/color][code]Set CN = Server.CreateObject("ADODB.Connection")[/code]建立與資料庫的連線是存取網路資料庫第一件要作的事,執行上列的敘述,我們就建立了一個名為『CN』的Connection資料庫連結物件。

[color=RoyalBlue]使用CN.Open方法開啟『message.mdb』資料庫[/color][code]CN.Open "Driver={Microsoft Access Driver (*.mdb)};_
DBQ="&Server.MapPath("message.mdb")[/code][color=Red]提示[/color]
當程式敘述太長時,我們可以利用『-』底線將程式敘述分隔成兩行,我們上列的敘述就因為太長了,筆者利用『-』底線將程式敘述分隔成兩行。


[list=1]
[*]由於我們開啟的資料庫類型為Access(*.mdb)資料庫,所以我們透過Access的ODBC驅動程式來存取資料庫"Driver={Microsoft Access Driver (*.mdb)}"。

[*]除了驅動程式的Drive參數外,我們還必須使用DBQ參數來指定我們想要開啟的資料庫檔案,而且我們所指定的資料庫檔案必須給予完整的路徑與檔案名稱,所以我們透過Server.MapPath來取的我們資料庫檔案message.mdb的完整路徑。

[*]Server.MapPath:將網址路徑轉為真實的檔案路徑 因為ASP規定必須指定檔案的真實路徑,用法如下:[code]真實的路徑=Server.MapPath("虛擬路徑")[/code][*]資料庫驅動程式名稱哪裡來?
連結不同類型的資料庫要使用不同的對應驅動程式,這是筆者一再強調的,那麼我們如何得知資料庫驅動程式的名稱呢?先打開『控制台』,然後再開啟『ODBC 資料來源』項目,開啟『ODBC 資料來源』項目後,接著就會出現『ODBC 資料來源管理員』對話視窗,我們直接切換至『驅動程式』選項頁,注意看到『名稱』欄位,這些條列的項目就是開啟相關資料庫的驅動程式名稱!


[attach]922[/attach][/list]

小誌 發表於 2010-5-26 00:30

[color=Green][size=4][b]建立一個Record Set物件:RS[/b][/size][/color][code]Set RS=Server.CreateObject("ADODB.Recordset")[/code]Recordset物件是負責瀏覽與操作從資料庫取出來的資料,Connection物件只負責與資料庫進行連結的動作,並不能使用資料庫內的資料,因此我們必須建立一可以存取資料庫資料的Recordset物件,執行上列的敘述,我們就建立了一個名為『RS』的Recordset資料庫存取物件。

[color=RoyalBlue]使用RS.Open方法存取『message.mdb』資料庫[/color][code]RS.Open SQL,CN,1,1[/code]使用open方法來開啟資料表或執行Select指令參數設定如下:
[list=1]
[*]參數一(Source):此參數可為一個Command物件名稱、一段SQL指令、一個指定的資料表格名稱或是一個Stored Procedure;若指定為資料表名稱則開啟整個資料表,若使用Select指令則建立的Recordset物件內所存放的資料為選取資料錄的結果。 在本例中我們使用了一段SQL語法:關於SQL語法我們將再下一單元中介紹。[code]SELECT*From allmessage order by 留言日期 Desc[/code][*]參數二(ActionConnection):Recordset可透過此屬性連結Connection物件,此參數可為Connection物件名稱或是一串包含『資料庫連結資訊(ConnectionString)』的字串參數。 在本例中我們將此參數設為連結我們已經建立好的Connection物件『CN』。

[*]參數三(CursorType):表以何種游標開啟資料,包含adOpenForwardOnly、adOpenKeyset、adOpenDynamic、adOpenStatic四種方式。在本例中我們使用adOpenForwardOnly方式開啟資料。

[*]參數四(LockType):表採用何種Lock型態,包含adLockReadOnly、adLockPessimistic、adLockOptimistic、adLockBatchOptimistic四種型態。在本例中我們使用預設的adLockReadOnly型態。
[/list]

小誌 發表於 2010-5-26 00:37

[size=5][color=DarkOrange][b]資料排序與SQL指令[/b][/color][/size]
我們之前談到,使用Recordset物件的open方法來開啟資料表時我們使用了一段SQL語法:[code]SELECT*From allmessage order by 留言日期 Desc[/code]現在我們就來看看如何撰寫SQL指令:

[color=Green][size=4][b]可篩選資料的Select指令[/b][/size][/color]
[list=1]
[*]Select指令的篩選敘述:
在SQL語言裡面,最經典也最實用的敘述就是『Select.... From』,『Select』這個英文單字大家應該都很熟悉,顧名思義他就是選擇的意思,要選什麼呢?選擇的來源資料『From』又在哪裡?這樣的兩個單字結合就構成了Select指令的基本敘述,在SQL語言中:『Select』是從『資料表』中選取某些『欄位』的資料,例如:

[attach]923[/attach]

在上例的意思是說:從學生成績資料表中選取數學成績欄位的資料。

[*]如果我們要選取的資料表資料包含了一個以上的欄位,則我們可以利用『,』逗號來將欄位名稱隔開。
參數使用說明:

[attach]924[/attach]

[*]如果我們要選取的資料表資料包含了全部的欄位,則我們可以利用萬用字元『*』來代表全部的欄位。

[attach]925[/attach]
[/list]


[size=4][color=Green][b]可排序資料的Select指令[/b][/color][/size]
[list=1]
[*]當我們希望被選取出來的資料錄資料能夠依據某個或某幾個欄位的內容來排序時,只要將這些排序依據的欄位擺放在『Order By』保留字之後,然後將這個排序的敘述連接在『Select.... From』後面就行了:

[attach]926[/attach]

[*]如果我們希望利用多個排序依據的欄位來進行排序,則我們可以利用『,』逗號來將欄位名稱隔開:

[attach]927[/attach]

上例中:我們將先按照『數學成績』欄位排序,然後再按照『國文成績』進行排序。
[*]『Order By』預設的排序方式是『由小排到大』,但若是我們希望排序方式是『由大排到小』,則我們可在欄位名稱後再加上『Desc』保留字!將排序方式改為我們要的『由大排到小』:

[attach]928[/attach]
[/list]


了解了SQL語言的Select指令用法後,我們回過頭來看一下我們在『顯示留言意見』網頁中的開啟資料庫ASP程式中的敘述:[code]SELECT*From allmessage order by 留言日期 Desc[/code]這個敘述的意義為:從資料表『allmessage』中取出所有欄位的資料,並將取出的資料錄內容依照『留言日期』欄位使用的『由大排到小』排序方式進行排序。

頁: [1]

麻辣家族討論版版為 麻辣學園 網站成員  由 昱得資訊工作室 © Since 1993 所提供