FLASH結合ASP資料庫的應用

來源:互聯網
上載者:User
資料|資料庫

  在討論例子之前,先瞭解Flash和Asp結合的原理,其實懂一點ASP的朋友都知道ASP是基於HTML的。Flash和Asp介面的原理和純ASP檔案之間互動的原理是一樣的,簡單地說就是頁面之間的資料交換。

  而在頁面之間傳遞資料我們是通過函數實現的:

LoadVariables(Flash4版本) / loadVariablesNum(Flash5版本、FlashMX版本)

  文法:

loadVariables (url ,location [, variables]);
loadVariablesNum (url ,location [, variables]);

  參數:

url 是需要載入的s指令檔位置。
location ,載入到swf的位置。
variables 是表示是否需要傳遞參數,有post和get兩種選項。

  說明:

  Flash的一個很重要的技巧,與外部檔案進行資料交換,如果能用好這一點,這無疑是擴大了 Flash 的應用範圍。

  Flash 能接受的變數格式為: 變數名=變數值 ,FLASH 支援多變數接受, 將上格式的多個變數分別用 & 分隔便可。而接受變數的方法有三種。

  第一:Flash可以直接接受HTML檔案的變數。

  方法如下

  1.把調用swf檔案的那條語句:

<param name=movie value="您的swf檔案.swf">
改為:<param name=movie value="您的swf檔案.swf?變數名=變數值">

  此時,swf檔案中就能接受到變數。

  2.如果要在同一個HTML檔案中傳送多個變數則書寫格式為:

<param name=movie value="您的swf檔案.swf?變數名1=變數值1&變數名2=變數值2&變數名3=變數值3">。

  3.運行HTML檔案,就可以在swf中直接顯示或引用變數了。

  (實際使用時,‘?’後直接跟‘&變數名’,才能將值傳遞過去)

  上面是通過html裡調用swf帶參數的方法來實現向flash中傳遞參數的,但flash與外部檔案“聯姻”的最典型方法是直接讀取是TXT檔案和cgi , php , asp檔案。前者可在客戶機運行,後者要伺服器支援。這就要我們現在講的命令load Variables了,下面我們就來講講具體的實現過程。

  第二:從TXT檔案中讀取變數:

  1.建立一個TXT檔案,檔案中的變數書寫格式為:

  m1=這是FLASH讀取TXT檔案

  其中“m1” 是變數名,“這是FLASH讀取TXT檔案” 是變數值。

  2.如果要在同一個TXT檔案中設定多個變數則書寫格式為:

m1=data1 & m2=data2.......

  3.設Actions

  選擇"Load Variables Into Location"

  在URL輸入框內輸入你的TXT檔案名稱(例如sunyue.txt).注意如果有路徑的話一定要加上相對或絕對路徑。

  全部Actions如下:

loadVariablesNum ("sunyue.txt", "0")

  在圖中我們可以看的更加清楚。

  這樣以後就可以在flash中直接顯示或引用m1,m2 …等變數了。需要注意的是這些變數必須是用在load Variables 命令裡定義的MC層中,在上例,m1 ,m2 … 就都存在於level 0 層。

  第三:從CGI,PHP,ASP檔案中讀取變數:

  關於這些背景程式語言,這裡不準備作詳細介紹,只講涉及FLASH讀取部份的內容。其實道理也很簡單,就象上面的從文字檔中讀入資料一樣,只要這些背景程式的執行結果也就是顯示“變數名=該變數的值&…” 就可以了。

  打比方,如果是CGI,就是 print “變數名=該變數的值&…”;PHP, 就是 echo “變數名=該變數的值&…”;如果是ASP,那麼當然就應該是 Response.Write “變數名=該變數的值&…” 了。而具體的調用過程,和上面的調用從txt檔案中調用一樣,只不過把flashtxt.txt檔案換成你的***.cgi, ***.php, ***.asp 檔案就行了。

  講到這裡,我們還可以講一個Load Variables和背景程式的另外一個用法―傳遞變數,當我們在使用編寫html頁面的時候,經常會用到通過post表單向背景程式發送資料,實在flash中,我們同樣可以做到這一點。

  我們可以看到和從txt,或其它檔案中取出資料一樣,前面兩項還是原來的檔案地址和所在的MC層,唯一不同的是在最後一個選項上用了Send using Post 。這樣的話,在flash中的定義的所有變數(當然也是要在location定義的相應層裡,在本例中是level 0 層) 就可以在相應的背景程式中直接引用了,至於如何引用,方法和處理html的form中post 過去的變數方法一樣。如php中可以直接引用,asp則是用Request.form("變數名")或者Reques.QueryString(“變數名”) 來引用該變數。

  如果相反,要從ASP中擷取對應變數則可以使用GET 方式。(實際使用時無論使用GET還是POST都可以)

  瞭解了這個函數使用方法之後,我們來看看下面這個簡單的例子:

  例一 成績查詢

  這個例子是把Access內的資料讀出來,並在Flash內顯示出來。這個例子一共有三個主要檔案,資料庫檔案score.mdb、Flash檔案score.swf和ASP檔案score.asp。

  這三個檔案的關係是:

  我們利用score.swf來製作查詢介面,並將使用者輸入的資料,傳遞給score.asp。而score.asp將接收到的資料和資料庫score.mdb中存在的資料進行比對,並將結果回傳給score.swf顯示出來。

  一個是Access的資料庫檔案score.mdb,它有一個score表,有四個欄位:

  ID,StudentName(姓名),CourseName(學科),ScoreMark(成績)。

  現在我們就來看看這個例子的製作過程吧。

  第一個影幀,Action是Stop,有一個供使用者輸入查詢欄位的文字框:Input1、Input2、Input3(目前只使用一個),兩個按鈕,一個是“確定”按鈕,另一個是“取消”按鈕:

  “確定”按鈕的Action是:

on (release) {
gotoAndPlay(2);
}

  “取消”按鈕的Action是:

on (release) {
Input1 = "";
Input2 = "";
Input3 = "";
}

  第二個影幀的Action是:loadVariablesNum("score.asp", 0, "GET");

  這個Action的作用是通過ASP檔案把Access資料庫內符合使用者查詢條件的資料讀出來。

  第三個影幀的Action是:

if (StudentName ne "") {
gotoAndStop(9);
}

  意思是如果StudentName不等於空值的話,就跳到第九個影幀;否則將會執行下去(即播放下一個影幀)。

  第4-7個影幀都沒有Action哦。

  第八個影幀的Action是:

gotoAndPlay(3);

  如果沒有符合的資料的話,就一直讀到有為止;讀到了就跳到第九個影幀哦。

  那麼再來看看第九個影幀:

  一共有三個動態文字框:StudentName, CourseName,ScoreMark

  資料庫內符合查詢條件的資料將會顯示在他們之中哦!

  還有一個“返回”按鈕,它的Action是:

on (release) {
gotoAndStop(1);
}

  好了,再來看看score.asp這個檔案吧:

Dim RS, Conn ' 定義兩個變數
Set RS = Server.CreateObject("ADODB.Recordset") ' 定義RS為RECORDSET對象
Set Conn = Server.CreateObject("ADODB.Connection") '定義Conn為CONNECTION對象
Conn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};
DBQ=" & Server.MapPath("score.mdb")
RS.Open "SELECT * FROM Score", Conn, 2, 3
' 開啟資料庫哦
RS.Find " StudentName = '" & UCase(Request.QueryString("Input1")) & "'"
' 找到合格資料
If RS.EOF Then ' 如果資料指標已到底
 Response.Write " StudentName=Not+Found&CourseName=Not+Found&ScoreMark=Not+Found"
 ' 就是沒有找到合格資料咯
 Else
  Response.Write " StudentName ="
  & Server.URLEncode(RS("StudentName "))
  & "&CourseName =" & Server.URLEncode(RS("CourseName "))
  & "&ScoreMark=" & Server.URLEncode(RS("ScoreMark"))
End If
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing ' 關閉並清空資料庫物件

  例二 隨機產生單詞

  從資料庫中隨機抽取英文單詞,進行訓練,這個例子一共有三個主要檔案,資料庫檔案word.mdb、Flash檔案word.swf和ASP檔案word.asp。

  這三個檔案的關係是與例一相似。

  一個是Access的資料庫檔案word.mdb,它有一個word表,有四個欄位:

  ID,word,explain,symbol。

  第一個影幀,Action是Stop,有一個[開始] 按鈕,它的Action是:

on (release) {
gotoAndPlay(2);
}
  第二個影幀的Action是:loadVariablesNum("word.asp", 0, "GET");
  這個Action的作用是通過ASP檔案把Access資料庫內符合使用者查詢條件的資料讀出來。
  第三個影幀的Action是:
if (explain ne "") {
GotoAndStop(9);
}

  意思是如果explain不等於空值的話,就跳到第九個影幀;否則將會執行下去(即播放下一個影幀)。

  第4-7個影幀都沒有Action哦。

  第八個影幀的Action是:

GotoAndPlay(3);

  如果沒有符合的資料的話,就一直讀到有為止;讀到了就跳到第九個影幀哦。

  那麼再來看看第九個影幀:

  一共有四個文字框:word(顯示正確英文單詞、動態), explain(中文解釋、動態),conclude(反饋正確/錯誤、動態)InputWord(使用者輸入英文),資料庫內符合查詢條件的資料將會顯示在他們之中!

  “確定”按鈕,“確定”按鈕的Action是:

on (release) {
if (InputWord ne Word) {
conclude = "錯誤!";
} else {
conclude = "正確!";
}
}

  “投降”按鈕,沒有任何動作,只是開始時把正確答案遮住,當單擊時顯示下面的答案。還有一個“重試”按鈕,“重試”按鈕的Action是:

on (release) {
GotoAndStop(3);
}

  好了,再來看看word.asp這個檔案吧:

Dim RS, Conn ' 定義兩個變數
Set RS = Server.CreateObject("ADODB.Recordset") ' 定義RS為RECORDSET對象
Set Conn = Server.CreateObject("ADODB.Connection") ' 定義Conn為CONNECTION對象
Conn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};
DBQ=" & Server.MapPath("word.mdb")
Conn.Open
RS.Open "SELECT count(*) FROM word ", Conn, 2, 3
allnumber=RS.fields(0)
' 返回資料庫中英文單詞總量
RS.Close
RANDOMIZE
KeyWord=Int((allnumber-1+1)*Rnd)
' 從取隨機數
RS.Open "SELECT * FROM word ", Conn, 2, 3
RS.Find "ID = " & KeyWord
' 查詢ID等於隨機數的對應的單詞
If RS.EOF Then
Response.Write "Word=None&Explain=None"
' 沒找到
Else
Response.Write "&Word=" & Server.URLEncode(RS("word"))& "&explain=" & Server.URLEncode(RS("explain"))
' 找到了後輸出 ?不只何原因必須使用“&word”否則無法傳值
End If
RS.Close
Set RS = Nothing
Conn.Close
Set Conn = Nothing ' 關閉並清空資料庫物件



相關文章

E-Commerce Solutions

Leverage the same tools powering the Alibaba Ecosystem

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。