一、提出问题:
在大型的ASP项目中,都涉及到了条件查询这一功能。用户要求能够针对特定的字段进行查询。对于有些数据,是从多个表取出来的,因此也要能对多个表进行查询。
一般的话,大多数的做法就是每个程序都做一个查询功能,因为每个查询的表都不同,涉及的字段也不同。但是,如果在大型的ASP项目中这么做的话,不仅增加了工作量、影响开发进度,而且不能使系统模块化、代码复用,增加了系统维护难度。因此,我们有必要使条件查询模块化。
二、解决思路:
我们设计条件查询的功能为:
1、选择查询字段(字段);
2、选择查询条件(<、>、=、<=、>=、<>、Null、Not Null、Like );
3、输入条件值;
4、选择运算关系(Or、And);
5、将查询条件添加到列表框、或从列表框删除。
详细界面请看下图:
我们以新闻表(dbNews)为例,假定新闻表包含有标题、时间、内容、发布人。
在查询数据库时,我们一般都是用如:
“Select * from News Where time='2002-05-22' and User='Tom'”,我们如果能在条件查询中返回“time='2002-05-22' and User='Tom'”的条件字符串,问题就解决了。但如果是不同的程序、不同的表怎么做呢?这就是看用什么方法来定义查询的字段了。
在这里,我们把查询字段作为一个过程写在程序中,在查询模块中调用,这样,查询的字段就是动态的生成了。
用户选择好了一个查询字段,以及匹配条件,将它添加到<select></select>框中,用户可以继续选择另外的查询条件,然后又把它添加到<select>中,完成了,就点查询按钮。用查询模块生成如:“time='2002-05-22' and User='Tom'”的语句,这样在程序中就可以调用了。
三、解决方案:
ASP通用条件查询模块的源代码请参看 (四、源代码)。
1、定义过程
在调用条件查询模块前,首先要在程序中定义一个SearchField()过程:
Sub SearchField()
Response.Write "<option Value='1Title'>标题</option>"
Response.Write "<option Value='1Time'>时间</option>"
Response.Write "<option Value='1Content'>内容</option>"
Response.Write "<option Value='1User'>发布人</option>"
End Sub
其中,Value中为字段名称,如果字段为字符型,就在字段名前加1,数字型就加2。如:"1Title"。
注意:如果数据是从多个表中取出来的,如:select * from News,User ;那么Value的值就要加上相应的表,如:1News.Title。这样就可以从多个表查询数据。
2、调用条件查询模块:
<!--#include file="../Public/Condition_Search.asp"-->
3、加入按钮事件:
加入“条件查询”按钮,并添加 onClick="search_dis(s1)"事件:
<Input type="Button" name=ConSearch onClick="search_dis(s1)">
默认状态下,条件查询模块隐藏在页面中,当点“条件查询”按钮,就显示出来,这样页面即美观,也不会妨碍用户浏览。
这样,我们就完成了“条件查询”模块的调用
当选择好了查询条件,执行查询后,程序getSql文本框将返回查询条件,如:“title='Chian' and user='tom'”,用request.form("getSql")取得!在把它加入到SQL语句中,一个新的查询就生成了。
四、ASP通用条件查询模块的源代码
<Script LANGUAGE=javaScript>
<!--
//隐藏或显示条件查询模块
function search_dis(ob){
if (ob.style.display=="none")
{ob.style.display="";window.location.href ('#down');}
else
{ob.style.display="none";}
}
//把条件查询语句添加到<select>查询列表框;
function AddSe(){
var val,val_tmp,Sql,oAdd,TextType;
var Field,Condition,TextVal,Relation;
Field=frm_Search.Field.options[frm_Search.Field.selectedIndex].text;
TextVal="'"+frm_Search.TextVal.value+"'" ;
Condition=frm_Search.Condition.options[frm_Search.Condition.selectedIndex].text;
Relation=frm_Search.Relation.options[frm_Search.Relation.selectedIndex].text;
val_tmp = frm_Search.Field.value;
val_tmp = val_tmp.substring(0,1);
//判断字段的数据类型,如果为1,就是字符、日期型;为2,就是数值型;
if (val_tmp==1)
{TextType="'"+frm_Search.TextVal.value+"' " ;}
else
{TextType=""+frm_Search.TextVal.value+" " ;}
val_Field = frm_Search.Field.value;
val_Field = val_Field.substr(1);
val= val_Field + frm_Search.Condition.value + TextType + frm_Search.Relation.value ;
Sql = Field+Condition+TextVal+Relation;
oAdd=document.createElement("option")
oAdd.value=val;
oAdd.text=Sql;
frm_Search.seSql.add(oAdd);
}
//把条件查询语句从<select>查询列表框中删除;
function moveSe(){
for (i=1;i<frm_Search.seSql.options.length;i++){
if(frm_Search.seSql.options[i].selected){
frm_Search.seSql.remove(frm_Search.seSql.selectedIndex);
}
}
}
//取得查询条件,并提交;
function getVal(){
var gettxt,Setable;
gettxt = "";
var path = window.location.pathname ; //取得页面链接和文件名
var line = path.lastIndexOf("/"); //取得最后一个'/'的位置
var dot = path.indexOf("."); //取得第一个'.'的位置
var Name = path.substring(line+1,dot); //取得文件名
var fileName = Name + ".asp";
for (i=1;i<frm_Search.seSql.options.length;i++){
gettxt = gettxt+ " " + frm_Search.seSql.options[i].value ;}
var valLeng=gettxt.lastIndexOf(" ");
gettxt=gettxt.substr(0,valLeng); //去掉条件子句的最后一个关系运算符
Setable = frm_Search.Setable.value ;
//window.open (fileName+'?gettxt='+gettxt,'_self'); //向当前页面传送查询条件子句
frm_Search.getSql.value = gettxt;
frm_Search.action = fileName;
frm_Search.submit ();
}
//-->
</Script>
<a Name="down"></a>
<Form Name="frm_Search" method="post" action="">
<input type="hidden" Name=getSql Value="">
<table bgcolor=#6699CC width=100%>
<tr><td>
<table width="617" border="0" cellspacing="1" cellpAdding="2" bgcolor="#CCCCCC"
align="center">
<tbody id=s1 style=display:none>
<tr>
<td width="134" height="25" bgcolor="#006699">
<div align="right"><font color="#FFFFFF" style="font-size:10pt">查询字段:
</font></div>
</td>
<td width="159" bgcolor="#F2F2F2">
<select Name="Field" style="font-size:12px"><%Call SearchField()%></select>
</td>
<td width="102" bgcolor="#E1E1E1">
<div align="center">
<input type="button" Name="AddSql" Value="添加>>>" onClick="AddSe()"
style="BACKGROUND: #ffdead;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px
solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:
hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:
1px;PAddING-TOP: 1px">
</div>
</td>
<td rowspan="4" bgcolor="#F2F2F2" width="221">
<select id="seSql" size="6">
<option Value="">------------查询条件-----------</option>
</select>
</td>
</tr>
<tr>
<td width="134" height="25" bgcolor="#006699">
<div align="right"><font color="#FFFFFF" style="font-size:10pt">查询条件:
</font></div>
</td>
<td width="159" bgcolor="#F2F2F2">
<select Name="Condition" style="font-size:12px">
<option Value="=">等 于</option>
<option Value=">">大 于</option>
<option Value=">=">大于等于</option>
<option Value="<">小 于</option>
<option Value="<=">小于等于</option>
<option Value="<>">不等于</option>
<option Value=" NULL ">为空</option>
<option Value=" NOT NULL ">不为空</option>
<option Value=" LIKE ">匹配</option>
</select>
</td>
<td width="102" bgcolor="#E1E1E1">
<div align="center">
<input type="button" Name="delSql" Value="<<<删除" onClick="moveSe()"
style="BACKGROUND: #ffdead;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px
solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:
hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:
1px;PAddING-TOP: 1px">
</div>
</td>
</tr>
<tr>
<td width="134" height="25" bgcolor="#006699">
<div align="right"><font color="#FFFFFF" style="font-size:10pt">条 件 值:
</font></div>
</td>
<td width="159" bgcolor="#F2F2F2">
<input type="text" id="TextVal" size="15" style="BACKGROUND-COLOR: white; BORDER-
BOTTOM: #000000 1px solid;BORDER-LEFT: #000000 1px solid;BORDER-RIGHT: #000000 1px solid;BORDER-
TOP: #000000 1px solid;FONT-SIZE: 9pt">
</td>
<td width="102" bgcolor="#E1E1E1"> </td>
</tr>
<tr>
<td width="134" height="25" bgcolor="#006699">
<div align="right"><font color="#FFFFFF" style="font-size:10pt">关系运算符:
</font></div>
</td>
<td width="159" bgcolor="#F2F2F2">
<select Name="Relation" style="font-size:12px">
<option Value="and">并且</option>
<option Value="or">或者</option>
</select>
</td>
<td width="102" bgcolor="#E1E1E1">
<div align="center">
<input type="button" Name="search_ok" Value="查 询" onClick="getVal()"
style="BACKGROUND: #deb887;BORDER-BOTTOM: #665b8e 1px solid;BORDER-LEFT: #ffffff 1px
solid;BORDER-RIGHT: #665b8e 1px solid;BORDER-TOP: #ffffff 1px solid;COLOR: #333333;CURSOR:
hand;FONT-SIZE: 12px;HEIGHT: 20px;PAddING-BOTTOM: 1px;PAddING-LEFT: 1px;PAddING-RIGHT:
1px;PAddING-TOP: 1px">
</div>
</td>
</tr>
</tbody>
</table>
</td></tr>
</table>
</Form>
分享到:
相关推荐
ASP.NET通用模块及典型系统开发实例导航 书的源代码
登录通用模块 角色管理通用模块 数据库连接通用模块 数据访问通用模块 打印通用模块 技术论坛通用模块 Email通用管理系统 ASP通用安全处理 ASP通用性能处理
asp.net 通用模块及典型系统开发实例导航,很实用!
asp通用翻页代码模块儿,可兼容在任何asp程序中。
ASP通用模块及典型系统开发实例导航.rar 里面含有大量的示例代码,各种通用模块,对ASP网站制作十一个很好的学习资料
学生可以从论文中理解项目的全局构想和关键设计决策。 - 设计文档:详细梳理了系统的构建过程,包含需求分析、系统框架设计、数据库规划、界面布局、功能模块划分等。此文档将引导学生逐步实现和调试系统。 - 源代码...
用asp编写的登录注册通用模块 包括表单的验证 数据库登录模块
asp.net 通用模块及典型系统开发实例导航,很实用!
ASP.net数据通用模块开发 登入和注册功能模块 搜索和编辑功能模块 上传和下载功能模块 讨论区功能模块 电子邮件收发模块 在线投票功能模块 新闻发布模块 和几个小型的由模块组合而成的系统 办公自动化系统 校园网...
ASP.NET通用项目管理系统源码 开发语言 : C# 数据库 : SQL2008 开发工具 : VS2010 源码类型 : WebForm 注意:不带技术支持,有帮助文件,虚拟商品,发货不退,看好再拍。 开发环境 :VS2010+sqlserver2008 +mvc 3.0+...
ASP数据库通用模块开发与系统移植,ASP开发资料,ASP数据库通用模块开发与系统移植
本书以面向对象思想和设计模式为指导,通过大量实例,详细介绍了ADO.NET、基于数据库应用的通用模块、数据库系统综合实例设计和开发、数据库的移植升级、项目打包发布和安装等方面的应用技术,内容包括数据库开发...
很经典而且很通用的一个asp.net2.0的新闻模块,不敢独享。
基于ASP的登录通用模块的设计,随着城市人口规模的扩大和公安部门对城市及农村人口管理工作规范性的逐渐增强,户籍管理工作的业务量急剧增大。传统的手工方法,存在效率低、易出错等缺点,已经难以满足当前户籍管理...
ASP.NET 2.0数据库通用模块开发与系统移植源代码
适合初学者开发入门模块,可以做个参考,呵呵我也是个菜鸟,主要功能是 用户注册|登陆验证|用户注册信息修改|退出登陆。用了三层模式。
计算机专业毕设精选——ASP通用信息查询管理系统(源代码+论文)是一份极具价值的资源,专为计算机专业的毕业生和在校大学生设计。该资源不仅包含了完整的源代码,还有一篇详尽的论文,详细阐述了系统的设计思路、...
VC++数据开发基础3-ASP数据库通用模块开发与系统移植,共四部分