14.5 Flash查询和添加数据库数据

news2024/11/16 9:34:38

14.5 Flash查询和添加数据库数据

在Flash与数据库通讯的实际应用中,如何实现用户的登录与注册是经常遇到的一个问题。登录实际上就是ASP根据Flash提供的数据查询数据库的过程,而注册则是ASP将Flash提供的数据写入数据库的过程。

1.启动Access2003,新建一名为“userInfo.mdb”的数据库,并在该数据库中新建一名为“userInfoTable”的表,该表中含有三个字段:“userName”、“passWord”和“level”,分别表示“用户名”、“密码”和“等级”,字段类型均为“文本”。

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

图14-5-1 “userInfoTable”表中的数据

3.以独占方式重新打开刚刚建立的数据库“userInfo.mdb”,为该数据库设置密码,如“123”,设置完毕后退出并关闭Access2003。

4.在该文件夹下新建一名为“login.asp”的文件,并输入以下代码后保存:

<%

'获取从Flash提交的数据

tmpUserName=Request("userName")

tmpPassWord=Request("passWord")

'SQL语句中的用户名和密码需要用单引号括起来

tmpUserName="'"&tmpUserName&"'"

tmpPassWord="'"&tmpPassWord&"'"

'创建Connection对象

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

'设置驱动

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

'指定数据库的路径

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

'指定数据库的密码

tmpPW="Jet OLEDB:Database Password=123"

'构造打开字符串

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

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

conn.Open tmpSTR

'建立库连接

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

'SQL语句,从数据表userInfoTable中查询与Flash提交的用户名和密码一致的记录

sql = "select * from userInfoTable where userName="&tmpUserName&" and passWord="&tmpPassWord

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

rs.Open sql, conn, 1, 3

 'While 循环语句,如果有符合条件的记录就输出

While Not rs.EOF

    '从表中读取userName、passWord和level列的值,并将其赋予三个变量

    userName = rs("userName")

    passWord = rs("passWord")

    level = rs("level")

    '将获取的值输出并用"#"隔开

    response.Write userName

    response.Write "#"

    response.Write passWord

    response.Write "#"

    response.Write level

    '转到下一条记录前用"###"隔开,以便在Flash中处理

    response.Write "###"

    '到下一条记录

    rs.MoveNext  

Wend

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

rs.Close

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

Set rs = Nothing

Set conn = Nothing

%>

5.在该文件夹下再建一名为“registe.asp”的文件,输入以下代码后保存:

<%

'获取从Flash提交的数据

tmpUserName=Request("userName")

tmpPassWord=Request("passWord")

'SQL语句中的用户名和密码需要用单引号括起来

tmpUserNameStr="'"&tmpUserName&"'"

'创建Connection对象

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

'设置驱动

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

'指定数据库的路径

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

'指定数据库的密码

tmpPW="Jet OLEDB:Database Password=123"

'构造打开字符串

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

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

conn.Open tmpSTR

'建立库连接

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

'SQL语句,从数据表userInfoTable中查询是否有跟Flash提交的用户名相同的记录,如果有则不允许重复注册

sql = "select * from userInfoTable where userName="&tmpUserNameStr

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

rs.Open sql, conn, 1, 3

 'if语句,如果没有该用户名记录,则允许添加数据

if rs.eof and rs.bof then

rs.addnew

rs("userName") =tmpUserName

rs("passWord")=tmpPassWord

rs("level") =1

rs.update

'返回注册成功的信息

response.write "true" 

else

'返回注册失败的信息

response.write "false" 

end if

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

rs.Close

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

Set rs = Nothing

Set conn = Nothing

%>

6.打开Flash,新建一名为“loginAndRegiste.fla”的Flash文档,并将其保存到IIS主目录(D盘下的“wwwroot”文件夹)下的“loginAndRegiste”文件夹。

7.新建一名为“loginAndRegiste.as”的Flash脚本文档,同样保存到“D:\wwwroot\ loginAndRegiste”下,使其与上面的“loginAndRegiste.fla”、“login.asp”、“registe.asp”和“userInfo.mdb”在同一文件夹下。

8.切换到“loginAndRegiste.fla”文档,选择【Ctrl+F7】组合键打开【Components】面板,展开【User Interface】树形菜单,分别拖动一个DataGrid组件和一个Button组件到场景中,然后将其删除。按下【Ctrl+L】组合键打开【Library】面板查看,确保DataGrid组件和Button组件已存在于库中。在“loginAndRegiste.fla”的属性面板中设置其【Document class】为“loginAndRegiste”,然后在“loginAndRegiste.as”脚本文档中输入下列代码并保存:

package {

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

       import flash.display.*;

       import flash.text.*;

       import flash.net.*;

       import flash.events.*;

       import flash.errors.*;

       import flash.system.*;

       //导入Button组件

       import fl.controls.Button;

       //导入DataGrid组件

       import fl.controls.DataGrid;

       //导入DataGridColumn类

       import fl.controls.dataGridClasses.DataGridColumn;

       //导入DataProvider类

       import fl.data.DataProvider;

       public class loginAndRegiste extends Sprite {

              //定义输入文本框

              private var userNameInputTxtFld:TextField;

              private var passWordInputTxtFld:TextField;

              //定义用户名和密码Label

              private var userNameLabel:TextField;

              private var passWordLabel:TextField;

              //定义两个变量,用以接收用户名和密码

              private var userName:String;

              private var passWord:String;

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

              private var returnInfoTxt:TextField;

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

              private var tmpString:String;

              //定义临时数组接收返回数据

              private var tmpArray:Array;

              //定义临时字符串

              private var tmpName:String;

              private var tmpPassWord:String;

              private var tmpLevel:String;

              //定义登录按钮和注册按钮

              private var loginBtn:Button;

              private var registeBtn:Button;

              //定义DataGrid以显示用户信息

              private var myDataGrid:DataGrid;

              //定义ASP文件路径

              private var aspPath:String;

              //定义URLRequest和URLLoader对象

              private var aspRequest:URLRequest;

              private var loginLoader:URLLoader;

              private var registeLoader:URLLoader;

              //构造函数

              public function loginAndRegiste() {

                     init();

              }

              //在场景中添加文本框

              private function init() {

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

                     System.useCodePage=true;

                     //用户名和密码输入框

                     userNameInputTxtFld= createTextField(200, 140, 100, 20);

                     passWordInputTxtFld= createTextField(200, 160, 100, 20);

                     userNameInputTxtFld.type = TextFieldType.INPUT;

                     passWordInputTxtFld.type = TextFieldType.INPUT;

                     userNameInputTxtFld.border = true;

                     passWordInputTxtFld.border = true;

                     passWordInputTxtFld.displayAsPassword=true;

                     //用户名和密码Label

                     userNameLabel=createTextField(150, 140, 50, 20);

                     passWordLabel=createTextField(150, 160, 50, 20);

                     userNameLabel.text="用户名:";

                     passWordLabel.text="密    码:";

                     //提示信息

                     returnInfoTxt= createTextField(200,190, 150, 20);

                     returnInfoTxt.type = TextFieldType.DYNAMIC;

                     returnInfoTxt.border=false;

                     returnInfoTxt.text="请输入用户名和密码...";

                     //添加登录按钮

                     loginBtn=new Button();

                     loginBtn.move(310,140);

                     loginBtn.setSize(50,20);

                     loginBtn.label="登录";

                     //当单击计算按钮时将数据提交给ASP进行计算

                     loginBtn.addEventListener(MouseEvent.CLICK,login);

                     addChild(loginBtn);

                     //添加注册按钮

                     registeBtn=new Button();

                     registeBtn.move(310,160);

                     registeBtn.setSize(50,20);

                     registeBtn.label="注册";

                     //当单击计算按钮时将数据提交给ASP进行计算

                     registeBtn.addEventListener(MouseEvent.CLICK,registe);

                     addChild(registeBtn);

              }

              //登录模块

              private function login(event:Event):void {

                     userName=userNameInputTxtFld.text;

                     passWord=passWordInputTxtFld.text;

                     if (userName!=""&&passWord!="") {

                            aspPath="http://127.0.0.1/loginAndRegiste/login.asp?userName="+userName+"&passWord="+passWord+"&randomNum="+Math.random();

                            aspRequest=new URLRequest(aspPath);

                            loginLoader=new URLLoader();

                            loginLoader.addEventListener(Event.COMPLETE,loginLoadComplete);

                            loginLoader.addEventListener(IOErrorEvent.IO_ERROR,loginLoadError);

                            try {

                                   loginLoader.load(aspRequest);

                            } catch (error:Error) {

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

                            }

                     } else {

                            returnInfoTxt.text="请检查您的用户名和密码...";

                     }

              }

              //注册模块

              private function registe(event:Event):void {

                     userName=userNameInputTxtFld.text;

                     passWord=passWordInputTxtFld.text;

                     if (userName!=""&&passWord!="") {

                            aspPath="http://127.0.0.1/loginAndRegiste/registe.asp?userName="+userName+"&passWord="+passWord+"&randomNum="+Math.random();

                            aspRequest=new URLRequest(aspPath);

                            registeLoader=new URLLoader();

                            registeLoader.addEventListener(Event.COMPLETE,registeLoadComplete);

                            registeLoader.addEventListener(IOErrorEvent.IO_ERROR,registeLoadError);

                            try {

                                   registeLoader.load(aspRequest);

                            } catch (error:Error) {

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

                            }

                     } else {

                            returnInfoTxt.text="请检查您的用户名和密码...";

                     }

              }

              //登录结束时的处理

              private function loginLoadComplete(event:Event):void {

                     tmpString=event.target.data;

                     if (tmpString!="") {

                            returnInfoTxt.text = "登录成功...";

                            tmpArray=new Array();

                            tmpArray=tmpString.split("###");

                            tmpArray.pop();

                            //添加DataProvider

                            var tmpDP:DataProvider = new DataProvider();

                            for (var i=0; i<tmpArray.length; i++) {

                                   tmpName=tmpArray[i].split("#")[0];

                                   tmpPassWord=tmpArray[i].split("#")[1];

                                   tmpLevel=tmpArray[i].split("#")[2];

                                   tmpDP.addItem({姓名:tmpName,密码:tmpPassWord,等级:tmpLevel});

                            }

                            var nameColumn:DataGridColumn = new DataGridColumn("姓名");

                            var passWordColumn:DataGridColumn = new DataGridColumn("密码");

                            var levelColumn:DataGridColumn = new DataGridColumn("等级");

                            //添加DataGrid组件

                            myDataGrid=new DataGrid();

                            myDataGrid.addColumn(nameColumn);

                            myDataGrid.addColumn(passWordColumn);

                            myDataGrid.addColumn(levelColumn);

                            myDataGrid.move(150, 220);

                            myDataGrid.setSize(210, 45);

                            myDataGrid.dataProvider=tmpDP;

                            addChild(myDataGrid);

                     } else {

                            returnInfoTxt.text = "登录失败...";

                     }

              }

              //无法登录时的处理

              private function loginLoadError(event:IOErrorEvent):void {

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

              }

              //注册结束时的处理

              private function registeLoadComplete(event:Event):void {

                     tmpString=event.target.data;

                     if (tmpString=="true") {

                            returnInfoTxt.text = "注册成功...";

                     } else {

                            returnInfoTxt.text = "注册失败...";

                     }

              }

              //无法注册时的处理

              private function registeLoadError(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;

              }

       }

}

9.按下【Ctrl+Enter】组合键,在“loginAndRegiste.swf”窗口中的用户名和密码输入框中输入用户名密码,单击【登录】按钮,如果用户名和密码正确,则给出该用户的其它信息,并提示“登录成功…”,如果用户名或密码错误,则提示“登录失败…”。如图14-5-2所示是登录成功时的状态。

图14-5-2登录成功

10.在“loginAndRegiste.swf”窗口中的用户名和密码输入框中输入用户名密码,单击【注册】按钮,如果数据库中没有该用户信息,则将该用户信息添加到数据,并给出“注册成功…”的提示,否则,将给出“注册失败…”的提示。如图14-5-3所示是注册成功时的状态。

图14-5-3注册成功

以上给出的注册和登录例子只是为了说明Flash如何查询和添加数据库中的数据,在实际应用中,用户注册成功后,可以跳到登录页提示用户登录,用户登录成功后,可以根据从数据库中获取的数据分配给用户相应的权限,用户根据相应的权限进行相关的操作,如:进入聊天室聊天、发帖回帖等。

Flash通过ASP对数据库进行的操作除了以上介绍的读取、修改、查询和添加以外,还有删除、批更新等其它操作,其原理大同小异,其中的关键之处就在于如何构造SQL语句,把符合条件的语句检索出来。当然,也可以在检索所有数据库记录的过程中直接使用条件语句进行判断,但效率会比直接使用SQL语句低许多。

在搞清楚Flash与数据库之间的基本通讯原理之后,学习的重点就可以转移到ASP与数据库的通讯及如何在Flash中灵活处理返回的数据上,处理好这两点,开发实用的RIA应用程序将非常轻松。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1411390.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

linux 查找文件或查找内容 (find grep)

一 linux 查找包含指定内容的文件&#xff1a; 在linux 有时我们只我知道内容但不知道文件在哪&#xff0c;可以使用find 与grep查找 例1 要查找指定目录&#xff08;默认包含子目录&#xff09;文件内容包含 xxx 的文件 find /etc/ -type f -exec grep -l "mysql"…

音频格式之AAC:(2)AAC封装格式ADIF,ADTS,LATM,extradata及AAC ES存储格式

系列文章目录 音频格式的介绍文章系列&#xff1a; 音频编解码格式介绍(1) ADPCM&#xff1a;adpcm编解码原理及其代码实现 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#xff1a;(1)MP3封装格式简介 音频编解码格式介绍(2) MP3 &#xff1a;音频格式之MP3&#x…

第14章_数据结构与集合源码(一维数组,链表,栈,队列,树与二叉树,List接口分析,Map接口分析,Set接口分析,HashMap的相关问题)

文章目录 第14章_数据结构与集合源码本章专题与脉络1. 数据结构剖析1.1 研究对象一&#xff1a;数据间逻辑关系1.2 研究对象二&#xff1a;数据的存储结构&#xff08;或物理结构&#xff09;1.3 研究对象三&#xff1a;运算结构1.4 小结 2. 一维数组2.1 数组的特点2.2 自定义数…

Linux——系统简介

1、从UNIX到LINUX 在目前主流的服务器端操作系统中&#xff0c;UNIX诞生于20世纪60年代末&#xff0c;Windows诞生于20世纪80年代中期&#xff0c;Linux诞生于20世纪90年代初&#xff0c;可以说UNIX是操作系统中的“老大哥”。 1.1、Linux简史 Linux内核最初是由李纳斯托瓦兹…

Chrony时间同步程序

Chrony简介 学习chrony之前首先要来看看chrony到底是干什么用的&#xff1a; chrony是网络时间协议 &#xff08;NTP&#xff09; 的通用实现。 它可以将系统时钟与 NTP 服务器、参考时钟同步 &#xff08;例如 GPS 接收器&#xff09;&#xff0c;以及使用手表和键盘手动输入…

vue3---inputRef.value.focus()报错Cannot read properties of null (reading ‘focus‘)

问题描述&#xff1a;点击编辑按钮&#xff0c;出现el-input框&#xff08;el-input显示隐藏通过v-if控制&#xff09; <el-input ref"inputRef" v-if"isEdit" v-model"modelName" blur"isEdit false" /> <el-button text …

机器学习_常见算法比较模型效果(LR、KNN、SVM、NB、DT、RF、XGB、LGB、CAT)

文章目录 KNNSVM朴素贝叶斯决策树随机森林 KNN “近朱者赤&#xff0c;近墨者黑”可以说是 KNN 的工作原理。 整个计算过程分为三步&#xff1a; 计算待分类物体与其他物体之间的距离&#xff1b;统计距离最近的 K 个邻居&#xff1b;对于 K 个最近的邻居&#xff0c;它们属于…

【Maven教程】(十五):编写 Maven 插件—— 编写 Maven 插件的一般步骤及案例、Mojo 标注与参数、错误处理和日志 ~

Maven 编写 Maven 插件 1️⃣ 编写 Maven 插件的一般步骤2️⃣ 案例&#xff1a;编写一个用于代码行统计的 Maven 插件3️⃣ Mojo 标注4️⃣ Mojo 参数5️⃣ 错误处理和日志6️⃣ 测试 Maven 插件&#x1f33e; 总结 前面文章已经讲过&#xff0c;Maven 的任何行为都是由插件完…

[设计模式Java实现附plantuml源码~创建型] 复杂对象的组装与创建——建造者模式

前言&#xff1a; 为什么之前写过Golang 版的设计模式&#xff0c;还在重新写Java 版&#xff1f; 答&#xff1a;因为对于我而言&#xff0c;当然也希望对正在学习的大伙有帮助。Java作为一门纯面向对象的语言&#xff0c;更适合用于学习设计模式。 为什么类图要附上uml 因为很…

如何使用Flutter构建高质量的用户界面

Flutter 是一种比较流行的移动应用开发框架&#xff0c;可以让开发者使用一个代码库构建高质量的 iOS 和 Android 应用。Flutter 以其快速、美观、高度可定制等优点吸引了开发社区的广泛关注。但如何使用 Flutter 构建高质量的用户界面呢&#xff1f;下面分为以下几个部分简单的…

聚醚醚酮(Polyether Ether Ketone)PEEK主要作用是什么?

聚醚醚酮&#xff08;Polyether Ether Ketone&#xff0c;PEEK&#xff09;在工程和高性能应用中具有广泛的应用&#xff0c;主要作用包括&#xff1a; 1.结构材料&#xff1a; PEEK因其优异的机械性能&#xff0c;包括高强度、高硬度和耐磨性&#xff0c;常被用作结构件的制造…

企业能源消耗监测管理系统是否可以做好能源计量与能耗分析?

能源消耗与分析是能源科学管理的基础&#xff0c;也可促进能源管理工作的改善&#xff0c;在企业中能源管理系统的作用也愈加重要。 首先&#xff0c;能源计量是能源管理的基础&#xff0c;通过能源精准计老化&#xff0c;容易出现测量设备不准确以及其他一些人为因素原因导致…

蓝凌OA sysUiExtend.do 任意文件上传漏洞复现

0x01 产品简介 蓝凌核心产品EKP平台定位为新一代数字化生态OA平台,数字化向纵深发展,正加速构建产业互联网,对企业协作能力提出更高要求,蓝凌新一代生态型OA平台能够支撑办公数字化、管理智能化、应用平台化、组织生态化,赋能大中型组织更高效的内外协作与管理,支撑商业…

编译PCL Qt程序

使用PCL的qt程序时&#xff0c;提示不是用QVTK编译的&#xff0c;所以需要在编译VTK时打开Qt的编译选项&#xff08;由于CMakeList比较复杂&#xff0c;使用CMakeGui进行配置&#xff0c;PCL同理&#xff09;&#xff0c;编译VTK完成后&#xff0c;编译PCL也需要配置Qt支持&…

【VTKExamples::PolyData】第十九期 ImplicitDataSetClipping

很高兴在雪易的CSDN遇见你 VTK技术爱好者 QQ:870202403 前言 本文分享VTK样例ImplicitDataSetClipping,并解析接口vtkIdFilter & vtkBox & vtkClipPolyData,希望对各位小伙伴有所帮助! 感谢各位小伙伴的点赞+关注,小易会继续努力分享,一起进步! 你的点赞就…

Pandas ------ 向 Excel 文件中写入含有合并表头的数据

Pandas ------ 向 Excel 文件中写入含有合并表头的数据 推荐阅读引言正文 推荐阅读 Pandas ------ 向 Excel 文件中写入含有 multi-index 和 Multi-column 表头的数据 引言 这里给大家介绍一下如何向 Excel 中写入带有合并表头的数据。 正文 import pandas as pddf1 pd.D…

flutter设置windows是否显示标题栏和状态栏和全屏显示

想要让桌面软件实现全屏和不显示状态栏或者自定义状态栏&#xff0c;就可以使用window_manager这个依赖库&#xff0c;使用起来还是非常方便的&#xff0c;可以自定义显示窗口大小和位置&#xff0c;还有设置标题栏是否展示等内容&#xff0c;也可以设置可拖动区域。官方仓库地…

C语言实现希尔排序算法(附带源代码)

希尔排序 希尔排序&#xff0c;也称递减增量排序算法&#xff0c;是插入排序的一种更高效的改进版本。希尔排序是非稳定排序算法。 希尔排序是基于插入排序的以下两点性质而提出改进方法的&#xff1a; 插入排序在对几乎已经排好序的数据操作时&#xff0c;效率高&#xff0…

Unity配置表xlsx/xls打包后读取错误问题

前言 代码如下&#xff1a; //文本解析private void ParseText(){//打开文本 读FileStream stream File.Open(Application.streamingAssetsPath excelname, FileMode.Open, FileAccess.Read, FileShare.Read);//读取文件流IExcelDataReader excelRead ExcelReaderFactory…

2011-2022年北大数字普惠金融指数“第五期”(包括省市县)

2011-2022年北大数字普惠金融指数“第五期”&#xff08;包括省市县&#xff09; 1、时间&#xff1a;2011-2022年 其中县级的时间为2014-2022年 2、来源&#xff1a;北大数字普惠金融指数 3、范围&#xff1a;全国31省&#xff0c;337个地级市以及2800个县 4、指标&#x…