1 建立数据库
我们利用ASP给客户端浏览器返回了想要的值,本节我们来练习如何用Flash接收这些值。其实Flash接收这些值并不难,只要能够适当调整ASP代码的输出形式,使之能够输出让Flash读懂的形式就万事大吉了。
Flash常用三种方式分别为利用LoadVariables方法、LoadVars类、XML类去读取数据。由于LoadVariables方法过于低效,在大中型工程中几乎没有露面的机会,所以我们就直接来讲解如何用LoadVars类和XML类去读取数据库中的数据。
首先我们要在虚拟目录内(e:/flashasp/)建立一个新数据库,打开Access软件,按“文件”→“新建”,在右侧弹出的“新建文件”面板中选择“空数据库”,在弹出的“文件新建数据库”选项卡中,选择路径(e:/flashasp/)和填写文件名(pb.mdb)填写完之后,按下“创建”按钮,软件将带你进入“数据库”选项卡
双击第一项“使用设计器创建表”,软件将带你进入建表页面,你可以发挥想象任意设计一个表,也可以和我一样建立一个肯定能正常运行的示例表,我为这个表建立3个字段:
1. id:自动增长类型,为每个字段值的唯一标识。
2. person:文本类型,记载人名,我将加入10个我喜欢的美剧角色名。
3. intro:备注类型,人物的介绍。
表设置成功后,按×按钮关闭当前选项卡,将此表命名为myTable,之后软件将询问是否建立主键,为了保证扩展性,我们选择“是”。
之后我们手动给数据库添加10条记录,你可以随意添加,我添加了10个美剧人名:
person | intro |
T-Bag | 人物名词.Prison.Break的人气大反派,幽默的邪恶人物,第二季的神 |
John Abruzzi | 人物名词.俗称阿布,又高又帅,可惜因为片约问题在SE2被编剧赐死 |
Scofield | 人物名词.身高仅次于阿布,女观众的最爱,有计谋但在社会经验中略显稚嫩 |
Lincoin | 人物名词.在SE1中担惊受怕的小混混在SE2中彻底苏醒了,一人打三人没问题 |
Sucre | 人物名词.悲情的西班牙人,被兄弟耍,老婆被抢,重情意,决心越狱之后寻找真爱 |
Mahone | 人物名词.悲哀的FBI,轻微的精神病倾向,但不可质疑的是他的智力和魄力 |
Eden | 人物名词.Hero中的亮点,具有说服能力,可惜情急之下自杀了(不知真假) |
Claire | 人物名词.Hero中的漂亮女孩,拉拉队长,具有自我修复能力 |
Sawyer | 人物名词.Lost中的帅主角,坏坏的,但很可爱,很喜欢Kate |
Sayid | 人物名词.Lost中唯一的军人,沉着冷静,最重要的是够狠 |
设置完成的数据库。
按×按钮关闭软件,同时填写的数据也被保存。
2 利用LoadVars类读取数据库中的数据
为了让Flash能读懂数据,我们必须修改ASP的输出形式。由第二章介绍可知,Flash利用LoadVars类能够读懂数据的形式为:
变量1=变量值1&变量2=变量值2&……
所以第一件事是把示例中的代码做一个修改,让它输出的格式符合标准形式,修改完成之后的代码如下:
<% @language="VBScript" @codepage="65001"%>
<%
'开启显式变量声明
Option Explicit
'设置输出类型
Response.contentType="text/html"
'定义三个变量,conn(Connection对象)、connstr(ConnectionString)、sql(一个SQL语句)
dim conn,connstr,rs,sql,i
'定义ConnectionString的值
i=1
connstr="provider=Microsoft.Jet.OLEDB.4.0;data source="&Server.MapPath("pb.mdb")&";"
'建立服务器连接对象
set conn=Server.CreateObject("ADODB.Connection")
'建立数据集对象
set rs=Server.CreateObject("ADODB.RecordSet")
'打开数据连接
conn.open connstr
'对数据库执行操作的sql语句,下节会详细介绍。本句的意思是到word数据表内按id字段值的升序取出前10个word,chinese字段的值。值被附加到数据集对象上被当作数据集的一个属性。
sql="select top 10 [person],[intro] from [myTable] order by id desc"
'游标类型和锁定类型都设置为1,这是一个只能向前的只读行为,读取速度最快
rs.open sql,conn,1,1
'进行do while循环,条件循环到符合条件的最后一项
do while not rs.eof
'这是修改的部分,使输出的文件能够被Flash中的LoadVars对象识别。
Response.Write("人物"&i&"="&rs("person")&"&介绍"&i&"="&rs("intro"))&"&"
'记录下移
rs.movenext
i=i+1
'与do while呼应的loop方法,为主循环体
loop
'将数据集对象关闭
rs.close
'将数据库连接关闭
conn.close
'释放数据集资源
set rs=nothing
'释放数据库连接资源
set conn=nothing
%>
把文件保存到虚拟目录下,文件名保存为loadvars.asp,在IIS服务管理器中浏览此页面。
由图可知,我们已经通过ASP把输出格式修改为LoadVars能够接收到的变量串形式了。接下来我们打开Flash软件,来编写代码让LoadVars对象接收数据库内的值:新建一个Flash文档,向主场景拖入一个TextArea组件,命名为myTextArea,用来显示接收到的值,动作面板的脚本如下:
//声明myTextArea为一个TextArea类实例
var myTextArea:mx.controls.TextArea;
//声明lv为一个新的LoadVars组件
var lv:LoadVars=new LoadVars();
//定义lv的onLoad函数
lv.onLoad=function(success:Boolean):Void{
//如果执行成功
if(success){
//在myTextArea中显示数据,unescape函数能把经过URLEncode的值还原。
myTextArea.text=unescape(this);
}else{
//否则显示错误
myTextArea.text="error";
}
}
//lv对象读取指定页面
lv.load("http://localhost:8090/first/loadvars.asp");
保存文件,按下Ctrl+Enter调试程序。
3 利用ActionScript格式化LoadVars读取的数据
我们已经读到数据库中的值,但这些值没有格式化,很不利于查阅。本节我们将利用动作脚本把接收到的数据格式化来完成这个简单的示例。修改动作面板中的脚本,完成后的代码如下:
//声明myTextArea为一个TextArea类实例
var myTextArea:mx.controls.TextArea;
//声明lv为一个新的LoadVars组件
var lv:LoadVars=new LoadVars();
//定义lv的onLoad函数
lv.onLoad=function(success:Boolean):Void{
//如果执行成功
if(success){
//执行10次循环,每次循环都将变量读出并追加到myTextArea组件中去
for(var i:Number=1;i<=10;i++){
myTextArea.text+="人物"+i+unescape(eval("this.人物"+i))+"的介绍是:"+unescape(eval("this.介绍"+i))+"/n";
}
}else{
//否则在myTextArea中显示错误
myTextArea.text="error";
}
}
//lv对象读取文件
lv.load("http://localhost:8090/first/loadvars.asp");
保存文件,按下Ctrl+Enter,通过这个简单的示例,我演示了如何用Flash的LoadVars对象接收数据库中的值,下节我将讲解如何利用XML对象接收数据库中的值。