关闭

★LV与ASP综合运用(一)

924人阅读 评论(0) 收藏 举报

★LV与ASP综合运用(一)

→这节是重点,我写教程的还不怕长呢,大家也要坚持住啊!这节将对前面讲过的知识进行一个综合运用。下面先回顾一下前面我们都掌握了哪些技能:

1,LV与外部文本文件通讯的基本原理(变量/值配对)
2,ASP如何接收变量以及输出内容(Request和Response)
3,LV与ASP通讯基本原理(依旧是变量/值配对原理)
4,ASP操作数据库基本技巧,包括:
  ①如何查询并显示数据表内容
  ②如何删除一条记录
  ③如何添加一条新记录
  ④如何更新一条记录
  ⑤如何显示记录的总条数
  ⑥如何分页,翻页,以及显示总页数,当前页码和当前页内容

现在请闭上眼睛想一下,一个简单的FLASH留言本所包含的内容不就这么多吗?如果我上面讲的内容你都掌握了,还有什么理由不能自己做一个留言板呢——什么?你没有实战经验?好吧,这节我就连你这唯一的理由也消灭掉。这节中我将通过一个LV和ASP交互实例把上面讲的内容来一个融合。请大家先下载我提供的源文件,其中包含五个文件:zonghe.fla、zonghe.swf、zonghe.html、zonghe.asp还有上节中提供的数据库文件shujuku.mdb。这是已经做好的成品,大家不妨先删除“zonghe.fla”AS贞和“zonghe.asp”中的所有代码,跟着我的讲解再一起来完成它,这样你会有更系统更深刻的认识。在此之前,你还非常有必要先在源文件中熟悉一下“zonghe.fla”里的界面布局及元件命名。为了方便讲解,这里同时贴出“zonghe.swf”的界面图示。

下面我们来逐步演示各项功能,首先是显示记录内容及相关信息。

第一步:打开“zonghe.fla”,在最上层的AS贞中写代码:
//================系统初始化================= 
//——————界面初始化 
//——————变量初始化 
//——————数组初始化 
//——————对象初始化 
//================逻辑功能区================= 
//================函数模块区=================
上面是我的习惯,先用注释把代码分好区,然后逐步向各区中添加需要的代码。

第二步:“显示”记录功能测试:
我个人习惯是:前台界面→后台单独完成→前台功能实现加后台合成,所以先写后台。

1,在“zonghe.asp”中添加以下代码:
<%@LANGUAGE="JAVASCRIPT"%>

<%
//建立数据库链接对象        
lianjie = Server.CreateObject("ADODB.Connection");
//打开数据库
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//创建“记录集”
rs = Server.CreateObject("ADODB.Recordset");
//设置一个选项变量,根据这个选项的值,来决定执行对应功能的代码,这个变量来自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>

<%
//——————根据变量“xuanxiang”决定调用对应的函数
//查询显示记录演示
if(xuanxiang=="显示"){
  xianshi();
}
%>

<%
//——————定义“显示”的功能函数
function xianshi(){
//查询的SQL语句
sql="select * from shujubiao";
//执行数据库查询
rs.Open(sql, lianjie, 3);
//从FLASH接收当前页码
var dangqianye=Request("dangqianye_flash");
//从FLASH接收每页显示的记录条数
var meiyejilu=Request("meiyejilu_flash");
//声明一个变量用来存储要输出的内容,初始为空
var shuchuneirong="";
//设置每页显示的记录条数
rs.PageSize=meiyejilu;
//设置当前显示的页码
rs.AbsolutePage=dangqianye;
//获取记录总条数
var zongtiaoshu=rs.RecordCount;
//获取总页数
var zongyeshu=rs.PageCount; 
//利用循环显示一页的所有内容,具体的页码在第二段代码的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
  if(!rs.EOF){
  //获取字段内容
  var xuhao=rs("xuhao");
  var xingming=rs("xingming");
  var yuwen=rs("yuwen");
  var shuxue=rs("shuxue");
  //将要显示的内容记录在“shuchuneirong”中
  shuchuneirong =shuchuneirong+"<br>序号:"+ xuhao +" | 姓名:"+xingming+" | 语文:"+yuwen+" | 数学:"+shuxue;
  rs.MoveNext(); 
  }
}
//将查询出来的内容输出成变量/值配对形式
Response.Write("&neirong_asp="+shuchuneirong);
//输出总条数
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//输出总页数
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>

<%
//关闭记录集对象
rs.Close();
//关闭连接对象
lianjie.Close();
%>
●说明:上面的代码有点长,大家不要害怕,其似都是前面一节讲过的东西。
代码一共有四段:第一段声明使用JS脚本;第二段主要是一些初始化,最后一句比较重要,变量“xuanxiang”将决定下面调用那个函数以执行对应的功能。第三段是逻辑功能区,根据变量“xuanxiang”决定调用那个函数;第四段是定义的“显示”函数,用来显示页码、记录条数和记录内容的,而且最后还以“变量/值”配对的形式输出它们,以便于返回FLASH。需要提示的是,这段代码中最开始“每页记录数”和“当前页”是从FLASH传递过来的;最后一段代码用来关闭记录集对象和数据库连接。在后台代码中,最重要的是,我们要明白哪些变量是要从FLASH传递过来的,哪些又是需要返回FLASH的。为了避免混淆,我一般把从FLASH传递给ASP的变量后加“_flash”,而从ASP返回FLASH的变量后则加“_asp”后缀。

2,后台有了,回到FLASH中继续我们的代码吧,打开“zonghe.fla”,输入以下代码:
//================系统初始化=================
//——————界面初始化
//编码
System.useCodepage = true;
//——————变量初始化
//声明一个“选项”变量,ASP中将根据这个变量决定当前演示的是那项功能
//初始化这个变量为“显示”,用来显示记录
var xuanxiang = "显示";
//当前页初始为第1页
var dangqianye = 1;
//每页记录数初始为5条
var meiyejilu = 5;
//——————数组初始化
//——————对象初始化
//LV对象,从上到下依次用于“显示”,“删除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================逻辑功能区==================
//——————显示功能测试
xianshi();
//================函数模块区==================
//——————“显示”功能
function xianshi() {
  //LV对象获取“选项”内容
  xianshi_lv.xuanxiang_flash = xuanxiang;
  //获取“当前页”
  xianshi_lv.dangqianye_flash = dangqianye;
  //获取“每页记录数”
  xianshi_lv.meiyejilu_flash = meiyejilu;
  //将以上获取的内容传递给FLASH
  xianshi_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), xianshi_lv, "post");
  //加载完成后显示一系列相关信息
  xianshi_lv.onLoad = function(chenggong) {
    if (chenggong) {
      //显示当前页(直接从FLASH获得)
      dangqianye_txt.text = dangqianye;
      //显示每页记录数(直接从FLASH获得)
      meiyetiaoshu_txt.text = meiyejilu;
      //显示总条数,总页数和本页的记录内容
      zongtiaoshu_txt.text = xianshi_lv.zongtiaoshu_asp;
      zongyeshu_txt.text = xianshi_lv.zongyeshu_asp;
      neirong_txt.htmlText = xianshi_lv.neirong_asp;
    } else {
      neirong_txt.htmlText = "加载失败!";
    }
  };
}
●说明:AS中的代码不难理解,首先是“界面初始”,我定义了需要传递给ASP的三个变量“选项”,“当前页”,“总页数”。另外我还声明了四个用于各种功能演示的LV对象,以备下面需要。“逻辑功能区”的代码非常简单,只有一句函数调用,这正是逻辑区的精髓,通过简洁的代码清晰的反映功能逻辑。代码最多的是“函数模块区”,这里定义的是“显示”函数,注意它的数据流程,首先它将“选项”,“当前页”和“每页记录数”记录在LV对象中,然后通过LV对象的sendAndLoad方法将这些信息发送给ASP,ASP接收到后,根据这些信息正确的输出需要的内容,这些内容遵循“变量/值”配对规则,最后FLASH通过LV对象又接收到这些返回的内容,并在接收成功后,在指定的动态文本框中显示它们。

我们可以在IIS下运行一下“zonghe.html”看看效果,我们会看到正确页码信息,当前页显示为1,“neirong_txt”文本框中显示第一页的内容。有兴趣的朋友可以自己在“zonghe.fla”中修改一下“dangqianye”和“meiyejilu”两个变量,看看显示结果有什么变化,思考一下导致这些变化的规律又是什么。

→今天就到这儿吧,建议大家多动动手,自己试验一下看能不能仅利用一个ASP文件,就把“删除”,“更新”和“添加”功能都实现了。其实它们的原理跟“显示”是相通的。等明天我写完下一节,大家再看看自己写的代码和我的有什么不同,也许会发现更多问题:)大家跟我一起加油吧!
★LV与ASP综合运用(二)

→接上节,现在开始第三步:“删除”功能:
在《ASP操作数据库入门》一节的最后,我给出了删除一条记录的SQL语句,不知道大家当时自己动手试验了没。如果没的话也没有关系,现在就跟我一起在FLASH中实现这个功能吧。而且我将演示如何利用“zonghe.asp”一个后台文件实现所有功能。
→在看代码之前,请大家先思考这样一个问题,如果要删除一条记录的话,你依据什么删除呢?依据“yuwen”成绩可以吗?打开我们的数据库表可以看到“毛宁”,“巩丽”和“李小龙”都是100分,如果我们删除语文成绩为100的记录,就会同时把这三个人的记录都删除了。为了避免发生这种情况,我们一般都依据数据类型为“自动编号”的字段,因为自动编号字段是绝对不会重复的,比如这里的“xuhao”。
→按照我的开发习惯,我们还是先来写后台,请在“zonghe.asp”写如下代码:
<%@LANGUAGE="JAVASCRIPT"%>
<%
//建立数据库链接对象 
lianjie = Server.CreateObject("ADODB.Connection");
//打开数据库
lianjie.Open("driver={Microsoft Access Driver (*.mdb)};dbq=" + Server.MapPath("shujuku.mdb"));
//创建“记录集”
rs = Server.CreateObject("ADODB.Recordset");
//设置一个选项变量,根据这个选项的值,来决定执行对应功能的代码,这个变量来自FLASH
var xuanxiang=Request("xuanxiang_flash");
%>
<%
//——————根据变量“xuanxiang”决定调用对应的函数
if(xuanxiang=="显示"){
  //查询显示记录演示
  xianshi();
}else if(xuanxiang=="删除"){
  //删除记录演示
  shanchu();
}
%>
<%
//——————定义“显示”的功能函数
function xianshi(){
//查询的SQL语句
sql="select * from shujubiao order by xuhao desc";
//执行数据库查询
rs.Open(sql, lianjie, 3);
//从FLASH接收当前页码
var dangqianye=Request("dangqianye_flash");
//从FLASH接收每页显示的记录条数
var meiyejilu=Request("meiyejilu_flash");
//声明一个变量用来存储要输出的内容,初始为空
var shuchuneirong="";
//设置每页显示的记录条数
rs.PageSize=meiyejilu;
//设置当前显示的页码
rs.AbsolutePage=dangqianye;
//获取记录总条数
var zongtiaoshu=rs.RecordCount;
//获取总页数
var zongyeshu=rs.PageCount; 
//利用循环显示一页的所有内容,具体的页码在第二段代码的“rs.AbsolutePage”中指定了
for (i=0;i<meiyejilu;i++){
  if(!rs.EOF){
  //获取字段内容
  var xuhao=rs("xuhao");
  var xingming=rs("xingming");
  var yuwen=rs("yuwen");
  var shuxue=rs("shuxue");
  //将要显示的内容记录在“shuchuneirong”中
  shuchuneirong =shuchuneirong+"<br>序号:"+ xuhao +" | 姓名:"+xingming+" | 语文:"+yuwen+" | 数学:"+shuxue;
  rs.MoveNext(); 
  }
}
//将查询出来的内容输出成变量/值配对形式
Response.Write("&neirong_asp="+shuchuneirong);
//输出总条数
Response.Write("&zongtiaoshu_asp="+zongtiaoshu);
//输出总页数
Response.Write("&zongyeshu_asp="+zongyeshu);
}
%>
<%
//——————定义“删除”的功能函数
function shanchu(){
//接收从FLASH传递过来的序号ID
var id=Request("xuhao_flash");
//删除的SQL语句
sql="delete from shujubiao where xuhao="+id;
//执行数据库查询
rs.Open(sql, lianjie, 3);
}
%>
●说明:对比上一节给出的ASP代码,眼尖的朋友一定会发现有三处不同:
1,最后一段关闭连接的代码没了,为什么要删除呢?这是为了在同一个ASP文件中多次利用一个连接对象和recordset对象。其实正规的写法里,是不推荐这么做的,这里只是为了演示和讲解方便,大家以后自己做留言本的时候,建议每个功能函数里都重新声明连接对象和recordset对象,并在函数结尾关闭。
2,最后一段加了一个“shanchu”函数,它接收从FLASH传递过来的记录序号,并执行删除语句。
3,在第三段的功能逻辑代码区,调用“shanchu”函数。
4,“xianshi”函数中的SQL语句最后加了一段:“order by xuhao desc”,这是让记录按xuhao字段倒序排列,这个是为以后“添加”功能服务的,它可以让最新添加的记录显示在最上边,便于我们观察。这里我们可以先不用理会它。
→好的,后台文件搞定了,现在回到FLASH中彻底完成我们的删除功能吧:)
打开“zonghe.fla”,输入下面的代码:
//================系统初始化=================
//——————界面初始化
//编码
System.useCodepage = true;
//——————变量初始化
//声明一个“选项”变量,ASP中将根据这个变量决定当前演示的是那项功能
//初始化这个变量为“显示”,用来显示记录
var xuanxiang = "显示";
//当前页初始为第1页
var dangqianye = 1;
//每页记录数初始为5条
var meiyejilu = 5;
//——————数组初始化
//——————对象初始化
//LV对象,从上到下依次用于“显示”,“删除”,“添加”,“更新”演示
var xianshi_lv = new LoadVars();
var shanchu_lv = new LoadVars();
var tianjia_lv = new LoadVars();
var gengxin_lv = new LoadVars();
//================逻辑功能区==================
//——————显示功能测试
xianshi();
//——————删除功能测试
shanchu_btn.onRelease = function() {
shanchu();
};
//================函数模块区==================
//——————“显示”功能
function xianshi() {
  //将选项设置为“显示”
  xuanxiang = "显示";
  //LV对象获取“选项”内容
  xianshi_lv.xuanxiang_flash = xuanxiang;
  //获取“当前页”
  xianshi_lv.dangqianye_flash = dangqianye;
  //获取“每页记录数”
  xianshi_lv.meiyejilu_flash = meiyejilu;
  //将以上获取的内容传递给FLASH
  xianshi_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), xianshi_lv, "post");
  //加载完成后显示一系列相关信息
  xianshi_lv.onLoad = function(chenggong) {
    if (chenggong) {
      //显示当前页(直接从FLASH获得)
      dangqianye_txt.text = dangqianye;
      //显示每页记录数(直接从FLASH获得)
      meiyetiaoshu_txt.text = meiyejilu;
      //显示总条数,总页数和本页的记录内容
      zongtiaoshu_txt.text = xianshi_lv.zongtiaoshu_asp;
      zongyeshu_txt.text = xianshi_lv.zongyeshu_asp;
      neirong_txt.htmlText = xianshi_lv.neirong_asp;
    } else {
      neirong_txt.htmlText = "加载失败!";
    }
  };
}
//——————“删除”功能
function shanchu() {
  //将“选项”设置为“删除”
  xuanxiang = "删除";
  //将设定为“删除”的“选项”记录在用于删除的LV对象
  shanchu_lv.xuanxiang_flash = xuanxiang;
  //获得要删除的记录序号也记录在LV对象中
  shanchu_lv.xuhao_flash = shanchuxuhao_txt.text;
  shanchu_lv.sendAndLoad("zonghe.asp?bianliang="+random(9999), shanchu_lv, "post");
  shanchu_lv.onLoad = function() {
    //根据ASP传回来的“成功”进行对应操作
    if (shanchu_lv.chenggong_asp == "成功") {
      shanchuxuhao_txt.text = "删除成功";
      //最后调用“显示”函数,在“neirong_txt”文本框中刷新内容显示
      xianshi();
    } else {
      shanchuxuhao_txt.text = "删除失败";
    }
  };
}
●说明:上面FLASH中的代码我们可以对比着ASP中的代码来看,ASP中添加了删除功能,FLASH中最后一段便对应的添加了一个“shanchu”函数,这个函数中的代码,相信大家现在参照着注释应该能够理解了吧。然后是“功能逻辑区”通过“删除”按钮调用删除函数。最后还有一点小小的改动,我在这里就不考察大家的眼力了,大家注意看,我在“xianshi”函数中的第一行添加了一句:xuanxiang="显示"。这是为了让“xianshi”函数更加独立,在“shanchu”函数中,当删除完成后,我调用了“xianshi”函数,以便让大家在FLASH中及时看到删除后的结果,如果“xianshi”中没有定义“xuanxiang”,则在“shanchu”函数中调用“xianshi”函数时,“xuanxiang”的值依然为“shanchu”,这样ASP中的“xianshi”函数就无法获得正确的参数,而显示删除后的内容了。
→好的,说了那么多,激动人心的时刻到来了,让我们在IIS下打开“zonghe.html”测试一下吧。刚打开你会看到正确的页码和内容显示,然后,你在删除的输入文本框中输入“13”,按“删除”按钮,当这个输入文本框提示“删除成功”后,你马上会看到“记录总数”由原来的13变成了12,内容文本框中“xuhao”为13的记录消失了。可怜的“赵微”就这样被我们轻轻一点就淘汰出局了:)
经过这次“删除”功能的演示,相信大家已经对我的思路和功能扩展的方法有了一定的了解。下面我将一次性完成“添加”和“更新”功能演示!
→第四步,“添加”和“更新”功能:
这一步我就不再贴代码了,大家直接下载源文件看吧,因为实在没什么好讲的了,这一步需要做的就是按着上一步的模式,分别在ASP和FLASH添加对应的函数块儿,然后再在“逻辑功能区”调用对应的功能函数就行了。都说一个组织良好的程序一开始比较复杂,越往后写反而越轻松,我想一篇好的教程也应该一样吧:)
★小总结:这篇教程到这里核心内容基本上讲完了,一个FLASH留言本的基本功能也差不多都实现了,但想象和成品的距离其实是咫尺天涯,想做一个功能完善的FLASH留言本,远不止我讲的这些内容,这里面还有很多技巧和细节,主要还是看你AS和ASP的基本功!反正捕鱼的方法我是倾囊相授了,能不能捕到鱼,还是要通过大家自己的实践和努力。其实我留给大家的作业还是很多的,包括翻页处理,管理登陆等等,但只要你真的领会我前面讲的原理了,要自己做出来理论上确实不难。可如果你现在还是一点头绪都没有,恐怕很有必要把我的教程再从头到尾重新看一遍了,用很长时间只学会一个知识点不可怕,怕就怕你用很长时间学了很多知识点,却没一个真正学会!
最后如果有谁通过自己的努力做出真正属于自己的FLASH留言本了,别忘了贴上来让火山和同志们一起欣赏欣赏,火山也算没白忙活这么长时间了:)
→下一节我再简单的谈一下FLASH和ASP的其他通讯方式就彻底结束喽!记得前几楼有朋友要求加精,那时有点早,现在斑竹可以认真看看这个教程能不能加精了,哈哈:)
0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:23644次
    • 积分:326
    • 等级:
    • 排名:千里之外
    • 原创:6篇
    • 转载:24篇
    • 译文:0篇
    • 评论:1条
    文章分类
    最新评论