纳速健身

标题: Flash和Asp数据库的结合应用 传递变量 获取变量 [打印本页]

作者: awagink    时间: 2008-7-2 18:44
标题: Flash和Asp数据库的结合应用 传递变量 获取变量
在讨论例子之前,先了解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 oRS, oConn ’ 定义两个变量  
Set oRS = Server.CreateObject("ADODB.Recordset") ’ 定义oRS为RECORDSET对象  
Set oConn = Server.CreateObject("ADODB.Connection") ’定义oConn为CONNECTION对象  
oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};  
DBQ=" & Server.MapPath("score.mdb")  
oRS.Open "SELECT * FROM Score", oConn, 2, 3  
’ 打开数据库哦  
oRS.Find " StudentName = ’" & UCase(Request.QueryString("Input1")) & "’"  
’ 找到符合条件的数据  
If oRS.EOF Then ’ 如果数据指针已到底  
 Response.Write " StudentName=Not+Found&CourseName=Not+Found&ScoreMark=Not+Found"  
 ’ 就是没有找到符合条件的数据咯  
 Else  
  Response.Write " StudentName ="  
  & Server.URLEncode(oRS("StudentName "))  
  & "&CourseName =" & Server.URLEncode(oRS("CourseName "))  
  & "&ScoreMark=" & Server.URLEncode(oRS("ScoreMark"))  
    
End If  

oRS.Close  
Set oRS = Nothing  
oConn.Close  
Set oConn = 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这个文件吧:
在讨论例子之前,先了解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是:
  1. on (release) {  
  2. gotoAndPlay(2);  
  3. }
复制代码
“取消”按钮的Action是:
  1. on (release) {  
  2. Input1 = "";  
  3. Input2 = "";  
  4. Input3 = "";  
  5. }
复制代码
  第二个影帧的Action是:
  1. loadVariablesNum("score.asp", 0, "GET");
复制代码
  这个Action的作用是通过ASP文件把Access数据库内符合用户查询条件的数据读出来。
  第三个影帧的Action是:
  1. if (StudentName ne "") {  
  2. gotoAndStop(9);  
  3. }
复制代码
  意思是如果StudentName不等于空值的话,就跳到第九个影帧;否则将会执行下去(即播放下一个影帧)。
  第4-7个影帧都没有Action哦。
  第八个影帧的Action是:    gotoAndPlay(3);
  如果没有符合的数据的话,就一直读到有为止;读到了就跳到第九个影帧哦。
  那么再来看看第九个影帧:
  一共有三个动态文本框:StudentName, CourseName,ScoreMark
  数据库内符合查询条件的数据将会显示在他们之中哦!
  还有一个“返回”按钮,它的Action是:
  
  1. on (release) {  
  2. gotoAndStop(1);  
  3. }
复制代码
好了,再来看看score.asp这个文件吧:
  1. Dim oRS, oConn ’ 定义两个变量  
  2. Set oRS = Server.CreateObject("ADODB.Recordset") ’ 定义oRS为RECORDSET对象  
  3. Set oConn = Server.CreateObject("ADODB.Connection") ’定义oConn为CONNECTION对象  
  4. oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};  
  5. DBQ=" & Server.MapPath("score.mdb")  
  6. oRS.Open "SELECT * FROM Score", oConn, 2, 3  
  7. ’ 打开数据库哦  
  8. oRS.Find " StudentName = ’" & UCase(Request.QueryString("Input1")) & "’"  
  9. ’ 找到符合条件的数据  
  10. If oRS.EOF Then ’ 如果数据指针已到底  
  11.  Response.Write " StudentName=Not+Found&CourseName=Not+Found&ScoreMark=Not+Found"  
  12.  ’ 就是没有找到符合条件的数据咯  
  13.  Else  
  14.   Response.Write " StudentName ="  
  15.   & Server.URLEncode(oRS("StudentName "))  
  16.   & "&CourseName =" & Server.URLEncode(oRS("CourseName "))  
  17.   & "&ScoreMark=" & Server.URLEncode(oRS("ScoreMark"))  
  18.     
  19. End If  

  20. oRS.Close  
  21. Set oRS = Nothing  
  22. oConn.Close  
  23. Set oConn = Nothing ’ 关闭并清空数据库对象
复制代码
例二 随机产生单词
从数据库中随机抽取英文单词,进行训练,这个例子一共有三个主要文件,数据库文件word.mdb、Flash文件word.swf和ASP文件word.asp。
这三个文件的关系是与例一相似。
一个是Access的数据库文件word.mdb,它有一个word表,有四个字段:
ID,word,explain,symbol。
第一个影帧,Action是Stop,有一个“开始”按钮,它的Action是:
  1. on (release) {  
  2. gotoAndPlay(2);  
  3. }
复制代码
  第二个影帧的
  1. Action是:loadVariablesNum("word.asp", 0, "GET");
复制代码
  这个Action的作用是通过ASP文件把Access数据库内符合用户查询条件的数据读出来。
  第三个影帧的Action是:
  1. if (explain ne "") {  
  2. GotoAndStop(9);  
  3. }
复制代码
  意思是如果explain不等于空值的话,就跳到第九个影帧;否则将会执行下去(即播放下一个影帧)。
  第4-7个影帧都没有Action哦。
  第八个影帧的Action是:
  
  1. GotoAndPlay(3);
复制代码
  如果没有符合的数据的话,就一直读到有为止;读到了就跳到第九个影帧哦。
  那么再来看看第九个影帧:
  一共有四个文本框:word(显示正确英文单词、动态), explain(中文解释、动态),conclude(反馈正确/错误、动态)InputWord(用户输入英文)
  数据库内符合查询条件的数据将会显示在他们之中!
“确定”按钮,“确定”按钮的Action是:
  1. on (release) {  
  2. if (InputWord ne Word) {  
  3. conclude = "错误!";  
  4. } else {  
  5. conclude = "正确!";  
  6. }  
  7. }
复制代码
“投降”按钮,没有任何动作,只是开始时把正确答案遮住,当单击时显示下面的答案。
还有一个“重试”按钮,“重试”按钮的Action是:
  
  1. on (release) {  
  2. GotoAndStop(3);  
  3. }
复制代码
好了,再来看看word.asp这个文件吧:
  1. Dim oRS, oConn ’ 定义两个变量  
  2. Set oRS = Server.CreateObject("ADODB.Recordset") ’ 定义oRS为RECORDSET对象  
  3. Set oConn = Server.CreateObject("ADODB.Connection") ’ 定义oConn为CONNECTION对象  
  4. oConn.ConnectionString = "Driver={Microsoft Access Driver (*.mdb)};  
  5. DBQ=" & Server.MapPath("word.mdb")  
  6. oConn.Open  
  7. oRS.Open "SELECT count(*) FROM word ", oConn, 2, 3  
  8. allnumber=oRS.fields(0)  
  9. ’ 返回数据库中英文单词总量  
  10. oRS.Close  

  11. RANDOMIZE  
  12. KeyWord=Int((allnumber-1+1)*Rnd)  
  13. ’ 从取随机数  
  14. oRS.Open "SELECT * FROM word ", oConn, 2, 3  
  15. oRS.Find "ID = " & KeyWord  
  16. ’ 查询ID等于随机数的对应的单词  
  17. If oRS.EOF Then  
  18. Response.Write "Word=None&Explain=None"  
  19. ’ 没找到  
  20. Else  
  21. Response.Write "&Word=" & Server.URLEncode(oRS("word"))& "&explain=" & Server.URLEncode(oRS("explain"))  
  22. ’ 找到了后输出 ?不只何原因必须使用“&word”否则无法传值  
  23. End If  
  24. oRS.Close  
  25. Set oRS = Nothing  
  26. oConn.Close  
  27. Set oConn = Nothing ’ 关闭并清空数据库对象
复制代码





欢迎光临 纳速健身 (https://nasue.com/) Powered by Discuz! X3.4