FLASH與ASP通信入門教程——做真正屬于自己的留言本第4/5頁
經(jīng)過前幾節(jié)的學(xué)習(xí),我們對(duì)LV類和ASP的輸入輸出應(yīng)該已經(jīng)很熟練了吧,而且我們也已經(jīng)了解了LV與ASP通訊的基本原理。這個(gè)原理可能并不復(fù)雜,不過如果你想利用它做出點(diǎn)東西來,關(guān)鍵還是要看你ASP和FLASH的基本功了。遺憾的是這篇教程主要講述FLASH與ASP通訊原理,更詳細(xì)更高級(jí)的ASP和FLASH技巧,我恐怕不能多講,不然這篇教程不知道什么時(shí)候才能寫完,同時(shí)也會(huì)失去重點(diǎn)。這節(jié)我將簡單的羅列一些ASP操作ACCESS數(shù)據(jù)庫的基本知識(shí),注意,我只是點(diǎn)到為止,更詳細(xì)的資料和講解網(wǎng)上很多,你可以自己去搜索。
首先我們需要建立一個(gè)ACCESS數(shù)據(jù)庫文件,命名為“shujuku.mdb”,并在其中新建數(shù)據(jù)表,命名為“shujubiao”。數(shù)據(jù)表中字段名稱、字段類型和字段內(nèi)容如下圖所示。示例的數(shù)據(jù)庫可以在最后下載,下載后請(qǐng)保存起來,因?yàn)槲乙院蟮闹v解都會(huì)用到它。
然后在數(shù)據(jù)庫同文件夾下建立一個(gè)操作數(shù)據(jù)庫的ASP文件,命名為“caozuo.asp”,并輸入以下代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立一個(gè)數(shù)據(jù)庫鏈接對(duì)象
lianjie = Server.CreateObject("ADODB.Connection");
//用已經(jīng)建立的數(shù)據(jù)庫鏈接對(duì)象打開數(shù)據(jù)庫
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創(chuàng)建一個(gè)“記錄集”,即“Recordset”,它的任務(wù)是儲(chǔ)存從數(shù)據(jù)庫里提取出來的數(shù)據(jù)
rs = Server.CreateObject("ADODB.Recordset");
//創(chuàng)建查詢數(shù)據(jù)庫的SQL語句,這里將查出“shujubiao”中的所有數(shù)據(jù)
sql="select * from shujubiao";
//執(zhí)行數(shù)據(jù)庫查詢,最后的數(shù)字參數(shù)主要用來指定打開和查詢數(shù)據(jù)庫的方式,有興趣可以百度一下
rs.Open(sql, lianjie, 3);
%>
說明:上面的代碼,除了SQL語句外,每個(gè)ASP文件差不多都是類似的,主要用來初始和查詢數(shù)據(jù)。數(shù)據(jù)是提出來了,但如果你想要按自己方式使用它們,還是要借助JS腳本來實(shí)現(xiàn)。另外這里要著重說一下SQL,SQL是專門用來查詢數(shù)據(jù)庫的語言,它可以按指定的規(guī)則查詢數(shù)據(jù)庫中指定的表和字段,功能強(qiáng)大,卻又非常容易理解,基本可以從字面意思猜出其功能來,這一節(jié)的最后我會(huì)仔細(xì)講一下常用的SQL語句。
現(xiàn)在先回到我們的ASP中,繼續(xù)在“caozuo.asp”中追加以下代碼:
<%
//當(dāng)前顯示的頁數(shù),這里設(shè)置為第一頁
var dangqianye=1;
//每頁顯示的記錄條數(shù),這里設(shè)置為5條
var meiyejilu=5;
//獲取記錄總條數(shù)
var zongtiaoshu=rs.RecordCount;
//設(shè)置每頁顯示的記錄條數(shù)
rs.PageSize=meiyejilu;
//設(shè)置當(dāng)前顯示的頁碼
rs.AbsolutePage=dangqianye;
//獲取總頁數(shù)
var zongyeshu=rs.PageCount;
//輸出總頁數(shù)、總條數(shù)、每頁記錄條數(shù)以及當(dāng)前頁碼
Response.Write("總條數(shù)為:"+zongtiaoshu+"<br>總頁數(shù)為:"+zongyeshu+"<br>每頁記錄條數(shù):"+meiyejilu+"<br>當(dāng)前頁:"+dangqianye+"<br>");
%>
說明:先在IIS下運(yùn)行一下,你會(huì)看到網(wǎng)頁上顯示:
總條數(shù)為:13
總頁數(shù)為:3
每頁記錄條數(shù):5
當(dāng)前頁:1
有興趣的朋友可以自己修改一下“meiyejilu”的值,然后再運(yùn)行看看它和總頁數(shù)存在什么關(guān)系,相信聰明的你一定能找到其中的規(guī)律:)注意,這里我一直在用“rs”,在第一段舉例的代碼中我已經(jīng)注釋過了,“rs”是“Recordset”對(duì)象的一個(gè)實(shí)例,我們從數(shù)據(jù)庫里查詢出來的數(shù)據(jù)都會(huì)儲(chǔ)存在這個(gè)實(shí)例中,我們之所以這么做,是因?yàn)椤癛ecordset”對(duì)象有很多屬性和方法,方便我們使用,比如這里的“PageSize”和“AbsolutePage”。
光顯示條數(shù)和頁數(shù)沒什么太大意義,我們要的是記錄中的內(nèi)容,好的,現(xiàn)在繼續(xù)追加以下代碼:
<%
//聲明一個(gè)變量用來存儲(chǔ)要輸出的內(nèi)容,初始為空
var shuchuneirong="";
//利用循環(huán)顯示一頁的所有內(nèi)容,具體的頁碼在第二段代碼的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
//if的作用下面再進(jìn)行說明
if(!rs.EOF){
//獲取字段內(nèi)容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//一次循環(huán)將獲得一條記錄的所有內(nèi)容,然后把這條記錄追加到變量“shuchuneirong”中,這樣循環(huán)結(jié)束的時(shí)候,它將儲(chǔ)存本頁所有的記錄內(nèi)容
shuchuneirong =shuchuneirong+"<br>序號(hào):"+ xuhao +" | 姓名:"+xingming+" | 語文:"+yuwen+" | 數(shù)學(xué):"+shuxue;
//本次循環(huán)結(jié)束后,將記錄集指定到下一條記錄
//上面的if判斷將在這里發(fā)揮作用,當(dāng)我們顯示最后一頁的時(shí)候,剩余的記錄數(shù)很可能小于設(shè)定的每頁記錄數(shù)
//如果不加判斷,rs就很有可能溢出界限,從而導(dǎo)致錯(cuò)誤
rs.MoveNext();
}
}
//在網(wǎng)頁中按指定格式輸出本頁所有的記錄內(nèi)容
Response.Write(shuchuneirong);
//關(guān)閉記錄集對(duì)象
rs.Close();
//關(guān)閉連接對(duì)象
lianjie.Close();
%>
說明:啥都不說了,保存并運(yùn)行吧,我們會(huì)在網(wǎng)頁中看到下面的輸出內(nèi)容:
總條數(shù)為:13
總頁數(shù)為:3
每頁記錄條數(shù):5
當(dāng)前頁:1
序號(hào):1 | 姓名:周星馳 | 語文:50 | 數(shù)學(xué):72
序號(hào):2 | 姓名:丘淑貞 | 語文:450 | 數(shù)學(xué):100
序號(hào):3 | 姓名:舒淇 | 語文:1000 | 數(shù)學(xué):2000
序號(hào):4 | 姓名:劉德華 | 語文:200 | 數(shù)學(xué):1000
序號(hào):5 | 姓名:小布什 | 語文:500 | 數(shù)學(xué):501
然后我們可以修改一下“dangqianye”,只要“當(dāng)前頁”小于等于“總頁數(shù)”,就能正確顯示本頁的內(nèi)容。其實(shí)現(xiàn)在很多FLASH留言本中的分頁就是用的這一原理,只不過到時(shí)候我們不可能像現(xiàn)在這樣手動(dòng)修改“AbsolutePage”的值,我們需要從FLASH傳遞頁碼值,然后在ASP中接收并賦值給“AbsolutePage”。哈哈!現(xiàn)在你是不是有點(diǎn)躍躍欲試了?先別急,因?yàn)槲疫€有一招入室絕學(xué)沒傳你呢,這套絕學(xué)就是那威震武林的SQL。
說練就練,但為了激發(fā)同學(xué)們學(xué)習(xí)的主動(dòng)性,下面我僅給出做一個(gè)簡易留言本必備的SQL語句:
1,查詢語句
語法:select 字段名 from 數(shù)據(jù)表名 where 查詢條件 order by 排列方式 (不加desc從低到高排序,加上相反)
舉例:僅查詢“shujubiao”表中“xuhao”,“xingming”兩個(gè)字段,并且“xuhao”要大于3,結(jié)果按“xuhao”倒序排列:
SQL語句:select xuhao,xingming from shujubiao where xuhao>3 order by xuhao desc
2,刪除記錄
語法:delete from 數(shù)據(jù)表 where 條件
舉例:刪除“xingming”為“小布什”的記錄:
SQL語句:delete from shujubiao where xingming='小布什'
3,添加記錄
語法:insert into 數(shù)據(jù)表 (字段名) values (字段值)
舉例:插入一條新記錄,“xingming”為“火山”,“yuwen”為“100”,“shuxue”是“1000”:
SQL語句:insert into shujubiao (xingming, yuwen, shuxue) values ('火山',100,1000)
說明:“xuhao”字段為“自動(dòng)編號(hào)類型”,不需要賦值。
4,更新記錄
語法:update 數(shù)據(jù)表 set 字段值=新值 where 條件
舉例:把“xuhao”為“1”的記錄中“xingming”字段改為“寂寞火山”,“yuwen”字段改為“200”
SQL語句:update shujubiao set xingming='寂寞火山',yuwen=200 where xuhao=1
有了以上四大護(hù)法,打敗FLASH留言板足夠了,建議大家親自動(dòng)手把我寫的例句放在“caozuo.asp”中實(shí)驗(yàn)一下,直觀的體驗(yàn)一下效果。測試時(shí),刷新頁面后你可能會(huì)看到頁面報(bào)錯(cuò),沒有關(guān)系,這并不影響SQL的執(zhí)行,這時(shí)你可以關(guān)閉數(shù)據(jù)表再打開就可以直接在數(shù)據(jù)庫中會(huì)看到效果了。只有第一個(gè)例子必須改動(dòng)一下ASP代碼,需要改那里才能使頁面正常顯示呢?嘿嘿,這個(gè)當(dāng)大家的小作業(yè)了,注意看頁面的錯(cuò)誤提示哦:)
下星期就要生產(chǎn)實(shí)習(xí)了,一下就是三個(gè)星期,一定要趕在實(shí)習(xí)前完工,呼呼~~
其實(shí)講到這里,你完全應(yīng)該可以按著“LV與ASP通訊原理”一節(jié)中講的方法,自己想辦法把這節(jié)中在網(wǎng)頁里顯示的內(nèi)容傳遞到FLASH里顯示了,善于學(xué)習(xí)的朋友不妨自己先動(dòng)手試一下,看能做到什么程度:)
ASP操作數(shù)據(jù)庫入門實(shí)例:demo02.rar
這節(jié)是重點(diǎn),我寫教程的還不怕長呢,大家也要堅(jiān)持住?。∵@節(jié)將對(duì)前面講過的知識(shí)進(jìn)行一個(gè)綜合運(yùn)用。下面先回顧一下前面我們都掌握了哪些技能:
1,LV與外部文本文件通訊的基本原理(變量/值配對(duì))
2,ASP如何接收變量以及輸出內(nèi)容(Request和Response)
3,LV與ASP通訊基本原理(依舊是變量/值配對(duì)原理)
4,ASP操作數(shù)據(jù)庫基本技巧,包括:
①如何查詢并顯示數(shù)據(jù)表內(nèi)容
②如何刪除一條記錄
③如何添加一條新記錄
④如何更新一條記錄
⑤如何顯示記錄的總條數(shù)
⑥如何分頁,翻頁,以及顯示總頁數(shù),當(dāng)前頁碼和當(dāng)前頁內(nèi)容
現(xiàn)在請(qǐng)閉上眼睛想一下,一個(gè)簡單的FLASH留言本所包含的內(nèi)容不就這么多嗎?如果我上面講的內(nèi)容你都掌握了,還有什么理由不能自己做一個(gè)留言板呢——什么?你沒有實(shí)戰(zhàn)經(jīng)驗(yàn)?好吧,這節(jié)我就連你這唯一的理由也消滅掉。這節(jié)中我將通過一個(gè)LV和ASP交互實(shí)例把上面講的內(nèi)容來一個(gè)融合。請(qǐng)大家先下載我提供的源文件,其中包含五個(gè)文件:zonghe.fla、zonghe.swf、zonghe.html、zonghe.asp還有上節(jié)中提供的數(shù)據(jù)庫文件shujuku.mdb。這是已經(jīng)做好的成品,大家不妨先刪除“zonghe.fla”AS貞和“zonghe.asp”中的所有代碼,跟著我的講解再一起來完成它,這樣你會(huì)有更系統(tǒng)更深刻的認(rèn)識(shí)。在此之前,你還非常有必要先在源文件中熟悉一下“zonghe.fla”里的界面布局及元件命名。為了方便講解,這里同時(shí)貼出“zonghe.swf”的界面圖示:
下面我們來逐步演示各項(xiàng)功能,首先是顯示記錄內(nèi)容及相關(guān)信息。
第一步:打開“zonghe.fla”,在最上層的AS貞中寫代碼:
//================系統(tǒng)初始化=================
//——————界面初始化
//——————變量初始化
//——————數(shù)組初始化
//——————對(duì)象初始化
//================邏輯功能區(qū)=================
//================函數(shù)模塊區(qū)=================
上面是我的習(xí)慣,先用注釋把代碼分好區(qū),然后逐步向各區(qū)中添加需要的代碼。
第二步:“顯示”記錄功能測試:
我個(gè)人習(xí)慣是:前臺(tái)界面→后臺(tái)單獨(dú)完成→前臺(tái)功能實(shí)現(xiàn)加后臺(tái)合成,所以先寫后臺(tái)。
1,在“zonghe.asp”中添加以下代碼:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立數(shù)據(jù)庫鏈接對(duì)象
lianjie = Server.CreateObject("ADODB.Connection");
//打開數(shù)據(jù)庫
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//創(chuàng)建“記錄集”
rs = Server.CreateObject("ADODB.Recordset");
//設(shè)置一個(gè)選項(xiàng)變量,根據(jù)這個(gè)選項(xiàng)的值,來決定執(zhí)行對(duì)應(yīng)功能的代碼,這個(gè)變量來自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>
<%
//——————根據(jù)變量“xuanxiang”決定調(diào)用對(duì)應(yīng)的函數(shù)
//查詢顯示記錄演示
if(xuanxiang=="顯示"){
xianshi();
}
%>
<%
//——————定義“顯示”的功能函數(shù)
function xianshi(){
//查詢的SQL語句
sql="select * from shujubiao";
//執(zhí)行數(shù)據(jù)庫查詢
rs.Open(sql, lianjie, 3);
//從FLASH接收當(dāng)前頁碼
var dangqianye=Request("dangqianye_flash");
//從FLASH接收每頁顯示的記錄條數(shù)
var meiyejilu=Request("meiyejilu_flash");
//聲明一個(gè)變量用來存儲(chǔ)要輸出的內(nèi)容,初始為空
var shuchuneirong="";
//設(shè)置每頁顯示的記錄條數(shù)
rs.PageSize=meiyejilu;
//設(shè)置當(dāng)前顯示的頁碼
rs.AbsolutePage=dangqianye;
//獲取記錄總條數(shù)
var zongtiaoshu=rs.RecordCount;
//獲取總頁數(shù)
var zongyeshu=rs.PageCount;
//利用循環(huán)顯示一頁的所有內(nèi)容,具體的頁碼在第二段代碼的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
if(!rs.EOF){
//獲取字段內(nèi)容
var xuhao=rs("xuhao");
var xingming=rs("xingming");
var yuwen=rs("yuwen");
var shuxue=rs("shuxue");
//將要顯示的內(nèi)容記錄在“shuchuneirong”中
shuchuneirong =shuchuneirong+"<br>序號(hào):"+ xuhao +" | 姓名:"+xingming+" | 語文:"+yuwen+" | 數(shù)學(xué):"+shuxue;
rs.MoveNext();
}
}
//將查詢出來的內(nèi)容輸出成變量/值配對(duì)形式
Response.Write("&neirong_asp="+shuchuneirong);
//輸出總條數(shù)
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//輸出總頁數(shù)
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>
<%
//關(guān)閉記錄集對(duì)象
rs.Close();
//關(guān)閉連接對(duì)象
lianjie.Close();
%>
說明:上面的代碼有點(diǎn)長,大家不要害怕,其似都是前面一節(jié)講過的東西。
代碼一共有四段:第一段聲明使用JS腳本;第二段主要是一些初始化,最后一句比較重要,變量“xuanxiang”將決定下面調(diào)用那個(gè)函數(shù)以執(zhí)行對(duì)應(yīng)的功能。第三段是邏輯功能區(qū),根據(jù)變量“xuanxiang”決定調(diào)用那個(gè)函數(shù);第四段是定義的“顯示”函數(shù),用來顯示頁碼、記錄條數(shù)和記錄內(nèi)容的,而且最后還以“變量/值”配對(duì)的形式輸出它們,以便于返回FLASH。需要提示的是,這段代碼中最開始“每頁記錄數(shù)”和“當(dāng)前頁”是從FLASH傳遞過來的;最后一段代碼用來關(guān)閉記錄集對(duì)象和數(shù)據(jù)庫連接。在后臺(tái)代碼中,最重要的是,我們要明白哪些變量是要從FLASH傳遞過來的,哪些又是需要返回FLASH的。為了避免混淆,我一般把從FLASH傳遞給ASP的變量后加“_flash”,而從ASP返回FLASH的變量后則加“_asp”后綴。
2,后臺(tái)有了,回到FLASH中繼續(xù)我們的代碼吧,打開“zonghe.fla”,輸入以下代碼:
//================系統(tǒng)初始化=================
//——————界面初始化
//編碼
System.useCodepage = true;
//——————變量初始化
//聲明一個(gè)“選項(xiàng)”變量,ASP中將根據(jù)這個(gè)變量決定當(dāng)前演示的是那項(xiàng)功能
//初始化這個(gè)變量為“顯示”,用來顯示記錄
var xuanxiang = "顯示";
//當(dāng)前頁初始為第1頁
var dangqianye = 1;
//每頁記錄數(shù)初始為5條
var meiyejilu = 5;
//——————數(shù)組初始化
//——————對(duì)象初始化
//LV對(duì)象,從上到下依次用于“顯示”,“刪除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================邏輯功能區(qū)==================
//——————顯示功能測試
xianshi();
//================函數(shù)模塊區(qū)==================
//——————“顯示”功能
function xianshi() {
//LV對(duì)象獲取“選項(xiàng)”內(nèi)容
xianshi_lv.xuanxiang_flash = xuanxiang;
//獲取“當(dāng)前頁”
xianshi_lv.dangqianye_flash = dangqianye;
//獲取“每頁記錄數(shù)”
xianshi_lv.meiyejilu_flash = meiyejilu;
//將以上獲取的內(nèi)容傳遞給FLASH
xianshi_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), xianshi_lv, "post");
//加載完成后顯示一系列相關(guān)信息
xianshi_lv.onLoad = function(chenggong) {
if (chenggong) {
//顯示當(dāng)前頁(直接從FLASH獲得)
dangqianye_txt.text = dangqianye;
//顯示每頁記錄數(shù)(直接從FLASH獲得)
meiyetiaoshu_txt.text = meiyejilu;
//顯示總條數(shù),總頁數(shù)和本頁的記錄內(nèi)容
zongtiaoshu_txt.text = xianshi_lv.zongtiaoshu_asp;
zongyeshu_txt.text = xianshi_lv.zongyeshu_asp;
neirong_txt.htmlText = xianshi_lv.neirong_asp;
} else {
neirong_txt.htmlText = "加載失??!";
}
};
}
說明:AS中的代碼不難理解,首先是“界面初始”,我定義了需要傳遞給ASP的三個(gè)變量“選項(xiàng)”,“當(dāng)前頁”,“總頁數(shù)”。另外我還聲明了四個(gè)用于各種功能演示的LV對(duì)象,以備下面需要?!斑壿嫻δ軈^(qū)”的代碼非常簡單,只有一句函數(shù)調(diào)用,這正是邏輯區(qū)的精髓,通過簡潔的代碼清晰的反映功能邏輯。代碼最多的是“函數(shù)模塊區(qū)”,這里定義的是“顯示”函數(shù),注意它的數(shù)據(jù)流程,首先它將“選項(xiàng)”,“當(dāng)前頁”和“每頁記錄數(shù)”記錄在LV對(duì)象中,然后通過LV對(duì)象的sendAndLoad方法將這些信息發(fā)送給ASP,ASP接收到后,根據(jù)這些信息正確的輸出需要的內(nèi)容,這些內(nèi)容遵循“變量/值”配對(duì)規(guī)則,最后FLASH通過LV對(duì)象又接收到這些返回的內(nèi)容,并在接收成功后,在指定的動(dòng)態(tài)文本框中顯示它們。
我們可以在IIS下運(yùn)行一下“zonghe.html”看看效果,我們會(huì)看到正確頁碼信息,當(dāng)前頁顯示為1,“neirong_txt”文本框中顯示第一頁的內(nèi)容。有興趣的朋友可以自己在“zonghe.fla”中修改一下“dangqianye”和“meiyejilu”兩個(gè)變量,看看顯示結(jié)果有什么變化,思考一下導(dǎo)致這些變化的規(guī)律又是什么。
今天就到這兒吧,建議大家多動(dòng)動(dòng)手,自己試驗(yàn)一下看能不能僅利用一個(gè)ASP文件,就把“刪除”,“更新”和“添加”功能都實(shí)現(xiàn)了。其實(shí)它們的原理跟“顯示”是相通的。等明天我寫完下一節(jié),大家再看看自己寫的代碼和我的有什么不同,也許會(huì)發(fā)現(xiàn)更多問題:)大家跟我一起加油吧!
LV與ASP綜合運(yùn)用之一:demo03.rar
相關(guān)文章
在Flash 設(shè)為首頁 加為收藏實(shí)現(xiàn)代碼
一直都是用js實(shí)現(xiàn)設(shè)為首頁和加為收藏頁面實(shí)現(xiàn) 在Flash中實(shí)現(xiàn)“設(shè)為首頁”和“加為收藏”功能是使用Get URL結(jié)合JavaScript來實(shí)現(xiàn)的。2009-03-03圖文演示Flash+ASP實(shí)現(xiàn)用戶登錄/注冊程序
圖文演示Flash+ASP實(shí)現(xiàn)用戶登錄/注冊程序...2007-12-12AS3.0 實(shí)例學(xué)習(xí) 熟悉tween以及tweenEvent的運(yùn)用
AS3.0 實(shí)例學(xué)習(xí) 熟悉tween以及tweenEvent的運(yùn)用...2007-12-12高手寫的Tracer-Flash代碼調(diào)試類代碼下載
高手寫的Tracer-Flash代碼調(diào)試類代碼下載...2007-12-12AS3.0實(shí)例學(xué)習(xí) 熟悉新的事件機(jī)制和addChild的運(yùn)用
AS3.0實(shí)例學(xué)習(xí) 熟悉新的事件機(jī)制和addChild的運(yùn)用...2007-12-12