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