14.4.2 Flash读取与修改数据库中的数据

14.4.2 Flash读取与修改数据库中的数据

计数器是网站必不可少的统计工具,使用计数器可以使网站管理者对网站的访问情况有一个清晰的了解。如果仅仅是统计首页访问量的话,用文本文件来存储数据就可以了,但如果统计的数据量比较大的话(如文章系统,需要统计每篇文章的访问量),文本文件就难以应付,此时就需要用到数据库。

下面通过一个Flash计数器的实现过程来了解Flash如何通过ASP读取与修改数据库中的数据。

要读取与修改数据库中的数据,首先需要建立一个数据库,并输入一些数据。数据库建立完毕后,由Flash向ASP提交请求,ASP根据请求对数据库进行操作后将结果返回给Flash,Flash以某种方式把结果显示出来。

1.启动Access2003,新建一名为"counter.mdb"的数据库,并在该数据库中新建一名为"myCount"的表,该表中只含有一个字段"count"(不包括"编号"字段),表示"访问次数",字段类型为"数字"。

2.在"myCount"表中输入数据,如图14-4-2所示。数据输入完毕后,关闭数据库,并将其保存到IIS主目录(D盘下的"wwwroot"文件夹)下的"counter"文件夹内。

图14-4-2 "myCount"表中的数据

3.单击Access2003工具栏中的【打开】按钮,在弹出的【打开】对话框中选中刚刚建立的数据库"counter.mdb",然后单击【打开】对话框右下角【打开】按钮右侧的下拉按钮,选择【以独占方式打开】重新打开数据库。如图14-4-3所示。

图14-4-3以独占方式打开数据库

4.单击Access2003菜单栏中的【工具】|【安全】|【设置数据库密码】,在弹出的【设置数据库密码】对话框中为该数据库设置密码,如"123",设置完毕后单击【确定】按钮退出并关闭Access2003。如图14-4-4所示。

图14-4-4设置数据库密码

  1. 打开Windows 2003附件中的"记事本"程序,并输入以下代码:

<%

'创建Connection对象

Set conn =Server.CreateObject("Adodb.Connection")

'设置驱动

tmpPD="Provider=Microsoft.Jet.OLEDB.4.0"

'指定数据库的路径

tmpDS="Data Source="&Server.MapPath("counter.mdb")

'指定数据库的密码

tmpPW="Jet OLEDB:Database Password=123"

'构造打开字符串

tmpSTR=tmpPD&";"&tmpDS&";"&tmpPW

'利用Connection对象的Open方法打开数据库

conn.Open tmpSTR

'建立库连接

Set rs = Server.CreateObject("Adodb.Recordset")

'打开从库中读出的记录集

rs.open "myCount",conn,1,3

'读取原始数据并加1

nowCount=rs("count")+1

'将加1后的结果再写回数据库

rs("count")=nowCount

'输出结果

response.write nowCount

'更新数据库

rs.update

'利用Connection对象的Close方法关闭连接

rs.Close

'将Connection对象从内存中删除,以释放资源

Set rs = Nothing

Set conn = Nothing

%>

注意,输入上面的标点符号时输入法要切换到英文状态。

6.将该文件另存为"counter.asp",并拷贝到"D:\wwwroot\counter"下,使其与上面的"counter.mdb"在同一文件夹下。

7.打开Flash,选择【File】|【New】命令,在弹出的【New Document】对话框中选择文档类型为【Flash File(ActionScript 3.0)】,单击【OK】按钮,新建一个Flash文档。然后将其保存到IIS主目录(D盘下的"wwwroot"文件夹)下的"counter"文件夹,并命名为"counter.fla"。

8.选择【File】|【New】命令,在弹出的【New Document】对话框中选择文档类型为【ActionScript File】,单击【OK】按钮,新建一个Flash脚本文档,然后将该Flash脚本文档同样保存到"D:\wwwroot\counter"下,并命名为"counter.as",使其与上面的"counter.fla"、"counter.asp"和"counter.mdb"在同一文件夹下。

9.切换到"counter.fla"文档,在其属性面板中设置其【Document class】为"counter",然后在"counter.as"脚本文档中输入下列代码并保存:

package {

//导入文件运行所需的类

import flash.display.*;

import flash.text.*;

import flash.net.*;

import flash.events.*;

import flash.errors.*;

import flash.system.*;

public class counter extends Sprite {

//初始化路径

private var IP:String;

private var iisPath:String;

//定义显示返回信息的文本框

private var returnInfoTxt:TextField;

//定义临时字符串接收返回数据

private var tmpString:String;

//定义ASP文件路径

private var aspPath:String;

//定义URLRequest和URLLoader对象

private var aspRequest:URLRequest;

private var aspLoader:URLLoader;

//构造函数

public function counter() {

init();

startLoad();

}

//在场景中添加文本框

private function init() {

//定义IP

IP="127.0.0.1";

iisPath = "http://"+IP+"/counter/";

//设置编码,不然会显示乱码

System.useCodePage=true;

//创建接收信息文本框

returnInfoTxt= createTextField(0,20, 150,20);

returnInfoTxt.type = TextFieldType.DYNAMIC;

returnInfoTxt.autoSize=TextFieldAutoSize.CENTER;

returnInfoTxt.border=false;

returnInfoTxt.selectable=false;

returnInfoTxt.text = "正在载入数据...";

}

//载入函数

private function startLoad() {

aspPath=iisPath+"counter.asp?randomNum="+Math.random();

aspRequest=new URLRequest(aspPath);

aspLoader=new URLLoader();

configureListeners(aspLoader);

try {

aspLoader.load(aspRequest);

} catch (error:Error) {

returnInfoTxt.text="加载ASP文件失败";

}

}

//分派侦听事件

private function configureListeners(dispatcher:IEventDispatcher):void {

dispatcher.addEventListener(Event.COMPLETE,aspLoadComplete);

dispatcher.addEventListener(IOErrorEvent.IO_ERROR,aspLoadError);

}

//ASP载入结束时的处理

private function aspLoadComplete(event:Event):void {

tmpString=event.target.data;

returnInfoTxt.text = "您是第"+tmpString+"位来访者";

}

//ASP载入错误时的处理

private function aspLoadError(event:IOErrorEvent):void {

returnInfoTxt.text="加载ASP文件失败";

}

//生成文本框函数

private function createTextField(x:Number, y:Number, width:Number, height:Number):TextField {

var tmpTxtFld:TextField = new TextField();

tmpTxtFld.x = x;

tmpTxtFld.y = y;

tmpTxtFld.width = width;

tmpTxtFld.height = height;

addChild(tmpTxtFld);

return tmpTxtFld;

}

}

}

10.按下【Ctrl+Enter】组合键,在"counter.swf"窗口中将看到计数器效果。如图14-4-5所示。

图14-4-5运行结果

从上面的"counter.asp"可以看到,利用ASP与数据库通讯的一般步骤可以分为:

1.设置驱动和数据库的路径

2.创建Connection对象

3.利用Connection对象的Open方法打开指定的数据库

4.进行读写或其它操作

5.输出结果

6.关闭数据库,释放内存

其中的第1、2、3、5步格式基本是固定不变的,与Flash密切相关的是第4步和第5步。在本例中,ASP读取数据的方法是:

nowCount=rs("count")+1

其中等号后面的count是数据库中的字段名,等号前面的nowCount是变量,rs("count")是取出该字段名下的值,rs("count")+1是指将rs("count")取出的值加1,然后把该值赋予等号前面的变量。

代码中的rs是由:

Set rs = Server.CreateObject("Adodb.Recordset")

设定的,如果:

Set myRs = Server.CreateObject("Adodb.Recordset")

则ASP读取数据时的方法应改为:

nowCount= myRs ("count")+1

在"counter.as"脚本文档中,aspPath后多了一个Math.random(),这样做可以保证Flash每次载入ASP的路径不同,以免由于IE缓存的缘故造成数据得不到及时刷新。

相关推荐
喵叔哟几秒前
16. 【.NET 8 实战--孢子记账--从单体到微服务】--汇率获取定时器
微服务·oracle·.net
xoxo-Rachel4 分钟前
(超级详细!!!)解决“com.mysql.jdbc.Driver is deprecated”警告:详解与优化
java·数据库·mysql
JH307337 分钟前
Oracle与MySQL中CONCAT()函数的使用差异
数据库·mysql·oracle
蓝染-惣右介39 分钟前
【MyBatisPlus·最新教程】包含多个改造案例,常用注解、条件构造器、代码生成、静态工具、类型处理器、分页插件、自动填充字段
java·数据库·tomcat·mybatis
冷心笑看丽美人40 分钟前
Spring框架特性及包下载(Java EE 学习笔记04)
数据库
旦沐已成舟2 小时前
DevOps-Jenkins-新手入门级
服务器
武子康2 小时前
Java-07 深入浅出 MyBatis - 一对多模型 SqlMapConfig 与 Mapper 详细讲解测试
java·开发语言·数据库·sql·mybatis·springboot
代码吐槽菌2 小时前
基于SSM的毕业论文管理系统【附源码】
java·开发语言·数据库·后端·ssm
路有瑶台2 小时前
MySQL数据库学习(持续更新ing)
数据库·学习·mysql
数字扫地僧3 小时前
WebLogic 版本升级的注意事项与流程
数据库